Wie sorgt man dafür, dass der Floating-Window-Dienst in Android Kotlin den Überblick über alles behält, einschließlich dAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie sorgt man dafür, dass der Floating-Window-Dienst in Android Kotlin den Überblick über alles behält, einschließlich d

Post by Anonymous »

Ich schreibe eine App, die mit AppInfo zum Ausführen von Apps funktionieren soll. Wenn Sie auf eine Schaltfläche klicken, sollte ein schwebendes Fenster angezeigt werden, das alles darunter abdeckt, bis meine App mit ihrer Aufgabe fertig ist (AppInfo Intent). Anschließend wird das schwebende Fenster durch Klicken auf die Schaltfläche „Schließen“ geschlossen. Aus irgendeinem Grund wird AppInfo Intent direkt nach der Anzeige des schwebenden Fensters und dem anschließenden Start von AppInfo Intent direkt über dem schwebenden Fenster angezeigt, wenn dies nicht erwartet wird. Wie sorgen Sie also dafür, dass das schwebende Fenster stets über allem auf dem Bildschirm bleibt, bis Sie das schwebende Fenster durch Klicken auf die Schaltfläche „Schließen“ schließen?
Teil der Hauptaktivität

Code: Select all

        //In MainActivity button setOnClickListener
//start overlay service
Intent(this, FloatingWindowService::class.java).also { intent ->
startService(intent)
}

for (pos in installedApps!!.indices) {
if (installedApps!![pos].isSelected()){

//Start an running app's AppInfo intent
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", installedApps!![pos].getAppPackage(), null)
intent.data = uri
startActivity(intent)
}
}
mRecyclerView?.adapter?.notifyDataSetChanged()
}
Floating-Window-Dienst

Code: Select all

class FloatingWindowService : Service() {

private lateinit var windowManager: WindowManager
private lateinit var floatingView: View
private lateinit var layoutParams: WindowManager.LayoutParams
private lateinit var floatbtn: Button

companion object {
const val CHANNEL_ID = "FloatingWindowServiceChannel"
}

override fun onBind(intent: Intent): IBinder? {
return null
}

override fun onCreate() {
super.onCreate()
createNotificationChannel()

// Create a notification for the foreground service
val notification: Notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Floating Window Active")
.setContentText("Your floating window service is running.")
.setSmallIcon(R.drawable.ic_launcher_foreground) // Replace with your own icon
.build()

startForeground(1, notification) // Start as foreground service

// Initialize views and window manager
windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
floatingView = LayoutInflater.from(this).inflate(R.layout.overlay_layout, null) // Replace with your layout

floatbtn = floatingView.findViewById(R.id.close_overlay_button)
floatbtn.setOnClickListener {
stopSelf()
}

// Define layout parameters for the floating window
layoutParams = WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
WindowManager.LayoutParams.TYPE_PHONE // Deprecated on newer APIs
},
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
).apply {
gravity = Gravity.TOP or Gravity.START
x = 0
y = 100
}

// Add the view to the window manager
windowManager.addView(floatingView, layoutParams)

// Example: Add a click listener or drag listener to the floating view
// ...  (implementation for moving/interacting with the window)
}

override fun onDestroy() {
super.onDestroy()
if (::floatingView.isInitialized) {
windowManager.removeView(floatingView)
}
}

private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val serviceChannel = NotificationChannel(
CHANNEL_ID,
"Floating Window Service Channel",
NotificationManager.IMPORTANCE_DEFAULT
)
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(serviceChannel)
}
}
}
AndroidManifest.XML

Code: Select all






Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post