我试图在广播接收器中打开一个活动,但通知抽屉没有关闭。当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)
}
}在通知中有不同的按钮(动态),每个按钮定义不同的应用程序。因此,如果我点击按钮,它应该打开它指定的应用程序。
我已经尝试提供下面的挂起的意图
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)它工作正常,但通知抽屉没有关闭。
发布于 2022-11-29 07:54:10
问题是关于克拉什,它在哪里?你不认为这对解决你的问题至关重要吗?放些日志,异常堆栈.
但我知道你得到了什么:Exception:SecurityException。这是因为您使用的是对话,直接在文档中可以找到:
这个常量在API级别31中被废弃。出于安全考虑,从Android Build.VERSION_CODES#S开始的第三方应用程序不赞成这种意图。应用程序未经授权的使用将导致针对API级别低于Build.VERSION_CODES#S的应用程序被删除广播意图,而针对SDK级Build.VERSION_CODES#S或更高级别的应用程序则会出现SecurityException。从外壳启动的仪器(如。测试)仍然能够使用意图。该平台将在适当的用例中自动折叠适当的系统对话框。对于所有其他用户,用户是控制关闭对话框的人。
因此:
https://stackoverflow.com/questions/74610610
复制相似问题