簡體   English   中英

用於在Android中啟動新活動的多個Intent標志

[英]Multiple Intent flags for starting a new Activity in Android

我試圖在Intent上添加更多標志,以在BroadcastReceiver內啟動新的Activity,以響應從應用程序另一部分發送的特定Intent。 正如我從LogCat消息中注意到的那樣,我已經添加了我創建的Intent的FLAG_ACTIVITY_NEW_TASK標志,然后添加了其他標志,但是在LogCat中我得到了與FLAG_ACTIVITY_NEW_TASK相同的錯誤。

這是代碼:

 public class actReceiver extends BroadcastReceiver {
 ...
    public void onReceive(Context context, Intent intent) {
    ...
     else if (intent.getAction().equals("something")) {
                Intent prefAct = new Intent(context, PreferencesActivity.class)
                prefAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                       .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
                       .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
                       .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(prefAct);
            }
     ... }
... }

以及特定的LogCat錯誤:

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

setFlags只是分配參數,如您在代碼段中所見

public Intent setFlags(int flags) {
    mFlags = flags;
    return this;
}

因此,根據您的情況,您只分配了最后一個。 要修復它,請放在或

 prefAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP);

或使用執行相同功能的addFlags

public Intent addFlags(int flags) {
    mFlags |= flags;
    return this;
}

使用addFlags()而不是setFlags()來添加其他標志。

http://developer.android.com/reference/android/content/Intent.html#addFlags(int)

setFlags()設置要使用的完整標志集,因此您必須| 在此使用的所有標志。 addFlags()可以多次調用,並且| 為您的標志。

使用kotlin和anko進行此操作的簡單方法,請參見摘要,請參見示例快照

startActivity(intentFor()。clearTask()。newTask()。noHistory())

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM