首页 > 解决方案 > 从 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);

    }

}

标签: javaandroid

解决方案


问题非常明显(实际上是经典编程问题:))-您将标志设置为不是 new created intent1,而是设置为intent,它作为参数传递。因此,您只需将其更改为:

intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

然后它应该工作。


推荐阅读