簡體   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