我正在开发一个应用程序,每 10 秒询问一次我在做什么,为此我创建了一个创建多项选择的“对话活动”,代码如下:
import android.app.AlertDialog
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import java.util.concurrent.TimeUnit
class DialogActivity : AppCompatActivity() {
override fun onStop() {
super.onStop()
Log.d("DialogActivity", "onStop")
// Votre code personnalisé ici
}
override fun onDestroy() {
super.onDestroy()
Log.d("DialogActivity", "onDestroy")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val builder = AlertDialog.Builder(this)
builder.setTitle("Que fais-tu ?")
val items = arrayOf("Activité 1", "Activité 2", "Activité 3")
val checkedItems = BooleanArray(items.size) { false }
builder.setMultiChoiceItems(items, checkedItems) { _, which, isChecked ->
checkedItems[which] = isChecked
}
builder.setPositiveButton("OK") { _, _ ->
val selectedItems = items.filterIndexed { index, _ -> checkedItems[index] }
Log.d("DialogActivity", "L'utilisateur a sélectionné : $selectedItems")
//planNextWorker()
finishAffinity()
}
builder.setNegativeButton("Annuler") { dialog, _ ->
dialog.cancel()
//planNextWorker()
finishAffinity()
}
builder.setOnCancelListener {
//planNextWorker()
finishAffinity()
}
// Afficher le dialogue APRÈS avoir défini tous les écouteurs et les boutons.
builder.show()
}
private fun planNextWorker() {
val followUpRequest = OneTimeWorkRequest.Builder(UserActivityAskingWorker::class.java)
.setInitialDelay(10, TimeUnit.SECONDS)
.build()
WorkManager.getInstance(this).enqueue(followUpRequest)
}
}
它由 MainActivity 调用:
package com.treehousetutorial.controll_app_0_2
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.treehousetutorial.controll_app_0_2.ui.theme.Controll_app_0_2Theme
import java.util.concurrent.TimeUnit
class MainActivity : ComponentActivity() {
private val overlayPermissionLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
// Gérez le résultat ici si nécessaire
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Demander la permission SYSTEM_ALERT_WINDOW
if (!Settings.canDrawOverlays(this)) {
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName"))
overlayPermissionLauncher.launch(intent)
}
setContent {
Controll_app_0_2Theme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
// Commencer le Worker
startOneTimeWork()
}
private fun startOneTimeWork() {
val oneTimeRequest = OneTimeWorkRequest.Builder(UserActivityAskingWorker::class.java)
.setInitialDelay(10, TimeUnit.SECONDS)
.build()
WorkManager.getInstance(this).enqueue(oneTimeRequest)
}
companion object {
const val OVERLAY_PERMISSION_REQ_CODE = 1001
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
Controll_app_0_2Theme {
Greeting("Android")
}
}
class UserActivityAskingWorker(appContext: Context, workerParams: WorkerParameters): Worker(appContext, workerParams) {
override fun doWork(): Result {
val intent = Intent(applicationContext, DialogActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
applicationContext.startActivity(intent)
return Result.success()
}
}
问题是,即使在我选择了我正在做的事情并按下“确定”之后,对话框也会消失,但它仍然在后台,正如您在此图中看到的那样
[![在此处输入图像描述][1]][1]
如果我愿意,我可以重新打开它。那么有人知道如何真正杀死它吗? (我已经检查过并调用了 ondestroy)(我使用 Miui 14.0.1,我认为它位于 android 12 上) [1]:
您可以通过添加来解决此问题
android:excludeFromRecents="true">
AndroidManifest.xml 中的 DialogActivity 部分