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
//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()
}
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)
}
}
}
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] //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() } [/code] Floating-Window-Dienst [code]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
Die drahtlose ADB-Verbindung funktioniert einwandfrei auf meinem Android 11-Telefon und meiner Windows-Workstation.
Aber das ist nicht praktisch, da ich jedes Mal, wenn die WLAN-Verbindung des...
Wie teilt man eine Liste in eine bestimmte Anzahl von Listen auf, nimmt die Elemente der Reihe nach und verteilt sie auf die Unterlisten (also ohne Partitionierung der Liste)?
Aufgrund einiger Entwicklungsbeschränkungen bei der Verwendung von .NET 8 muss ich einen wiederverwendbaren Dienst verwalten. Diese müssen entweder vorübergehend oder Singleton sein, aber 1 von 3...
Wie können Ausnahmen, die von einem Socket-Server ausgelöst werden, der in einer Aufgabengruppenaufgabe ausgeführt wird, an die übergeordnete Aufgabengruppe weitergegeben werden? Mit dem gegebenen...