我正在尝试打开广播接收器中的活动,但通知抽屉未关闭。当ACTION_CLOSE_SYSTEM_DIALOGS被弃用时,应用程序正在崩溃,是否有其他解决方案?
nLServiceReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
println("BroadcastReceiver----${intent.action}---------------/--/-/-/-/-/-/-/-")
Handler(Looper.getMainLooper()).postDelayed({
currentAppActivityList.clear()
if(SDK_INT < 31){
val closeIntent = Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
applicationContext.sendBroadcast(closeIntent)
}
startActivity(applicationContext.packageManager.getLaunchIntentForPackage("${intent.action}"))
}, 1000)
}
}
通知有不同的按钮(动态),每个按钮定义一个不同的应用程序,所以如果我点击按钮,它应该打开其分配的应用程序。
我试着在pending intent
val intent1 = Intent(context.packageManager.getLaunchIntentForPackage(appInfo!![i].packageName))
val pendingIntent1 = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_IMMUTABLE)
但是想在应用程序启动之前做一些操作,所以我添加了广播接收器。
val pendingIntent1 = PendingIntent.getBroadcast(this, 0, Intent(appInfo!![i].packageName), PendingIntent.FLAG_IMMUTABLE)
工作正常,但是通知抽屉没有关闭。
问题是关于崩溃,它在哪里?你不认为这对解决你的问题很重要吗?
但是我知道你得到的Exception
是什么:SecurityException
。这是因为你正在使用ACTION_CLOSE_SYSTEM_DIALOGS,直接在doc中你可以找到:
此常量在API级别31中已弃用。
从Android Build开始的第三方应用程序不支持此意图。VERSION_CODES#S出于安全原因。未经授权使用的应用程序将导致广播意图被丢弃的应用程序的API级别低于Build。VERSION_CODES#S以及针对SDK级别构建的应用的SecurityException。VERSION_CODES#S或更高版本。从shell启动的检测(例如;测试)仍然能够使用意图。平台将在适当的用例中自动折叠适当的系统对话框。对于所有其他的,用户是控制关闭对话框的人。
:
- 现在只有用户或系统可以关闭通知抽屉
- always read/post exception
- 读取文件