java - 从 Activity 外部调用 startActivity()
问题描述
我的应用程序有一个屏幕小部件。单击此小部件时,它会打开“DeveloperMode”设置。但在某些设备中,应用程序崩溃并显示以下消息。
原因:android.util.AndroidRuntimeException:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?
我尝试使用 addFlags 和 setFlags 添加这一行,但仍然遇到同样的问题。我看过以前问过的类似问题,但没有一个有效。这是我DevModeWidgetReceiver
的扩展BroadcastReceiver
。
public class DevModeWidgetReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(new ComponentName(context, DevModeWidgetReceiver.class), views);
//without FLAG_ACTIVITY_NEW_TASK
//context.startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS));
//with set FLAG_ACTIVITY_NEW_TASK
/*Intent intent1 = new Intent(new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);*/
//with add FLAG_ACTIVITY_NEW_TASK
Intent intent1 = new Intent(new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(intent1);
}
}
解决方案
问题非常明显(实际上是经典编程问题:))-您将标志设置为不是 new created intent1
,而是设置为intent
,它作为参数传递。因此,您只需将其更改为:
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
然后它应该工作。
推荐阅读
- neo4j - 我怎样才能获得第二条短路径?
- laravel - Laravel 类在 config:clear 后未定义
- java - 关于最后一封带有 getSubject().contains 的电子邮件的 IMAP 问题
- c++ - 为什么会出现分段错误?
- stata - 如何在 coefplot 中添加阴影区域和线段?
- android - Kotlin - 通用类型安全,错误警告?java.lang.ClassCastException
- ios - Selector 方法必须与观察者所在的实例相同吗?
- hadoop - “WARN hdfs.DFSUtil: Namenode for null 对于 ID null 仍未解决。”
- amazon-web-services - AWS SQS - 队列消费者数量与传输中消息数量之间的关系
- sap - 动态隐藏 Adobe Form 中的徽标?