繁体   English   中英

从Activity外部调用startActivity()

[英]Calling startActivity() from outside of an Activity

我的应用程序有一个屏幕小部件。 单击此窗口小部件时,将打开“ 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);

    }

}

这个问题很明显(实际上是经典的编程方法之一:))-您正在将标志设置为不是新创建的intent1 ,而是设置为intent ,它作为参数传递。 因此,您只需将其更改为:

intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

然后它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM