1. 程式人生 > >在 BroadcastReceiver 中啟動 Activity 的問題

在 BroadcastReceiver 中啟動 Activity 的問題

在BroadcastReceiver中啟動Activity的問題

  在BroadcastReceiver中啟動Activity:
  
  如果在BroadcastReceiver的onReceive()方法中如下啟動一個Activity
  Intent intent=new Intent(context,AnotherActivity.class);
  context.startActivity(intent);
  可捕獲異常資訊:
  android.util.AndroidRuntimeException: 
  Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. 
  Is this really what you want?
  它說明:在Activity的context(上下文環境)之外呼叫startActivity()方法時
  需要給Intent設定一個flag:FLAG_ACTIVITY_NEW_TASK
  
  所以在BroadcastReceiver的onReceive()方法中啟動Activity應寫為:
  Intent intent=new Intent(context,AnotherActivity.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  context.startActivity(intent);
  
  之前描述了問題的現象和解決辦法,現在試著解釋一下原因:
  1 在普通情況下,必須要有前一個Activity的Context,才能啟動後一個Activity
  2 但是在BroadcastReceiver裡面是沒有Activity的Context的
  3 對於startActivity()方法,原始碼中有這麼一段描述:
    Note that if this method is being called from outside of an
    {@link android.app.Activity} Context, then the Intent must include
    the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
    without being started from an existing Activity, there is no existing
    task in which to place the new activity and thus it needs to be placed
    in its own separate task.
    說白了就是如果不加這個flag就沒有一個Task來存放新啟動的Activity.
    
  4 其實該flag和設定Activity的LaunchMode為SingleTask的效果是一樣的

                                                                  
                                                                           全棧開發者微信公眾號 

相關推薦

BroadcastReceiver 啟動 Activity 的問題

在BroadcastReceiver中啟動Activity的問題   在BroadcastReceiver中啟動Activity:      如果在BroadcastReceiver的onReceive()方法中如下啟動一個Activity   Intent inten

Blog-03-在Service啟動Activity與優化

在Service中啟動Activity 1、建立主Activity,MainActivity。 public class MainActivity extends AppCompatActivity { @Override protecte

Android6.0 AMS啟動Activity(五) 在新程序啟動Activity

 前面我們在分析Activity啟動過程的時候,看到同一個應用程式的Activity一般都是在同一個程序中啟動,事實上,Activity也可以像Service一樣在新的程序中啟動,這樣,一個應用程式就可以跨越好幾個程序了,本文就分析一下在新的程序中啟動Activity的

在不繼承Activity類的其他類啟動Activity

先給類中傳Context引數然後Intent intent = new Intent(context,LoginActivity.class); context.startActivity(intent);就可以啟動您要啟動的Activity了

Android6.0 AMS 新程序啟動Activity

看到同一個應用程式的Activity一般都是在同一個程序中啟動,事實上,Activity也可以像Service一樣在新的程序中啟動,這樣,一個應用程式就可以跨越好幾個程序了,本文就分析一下在新的程序中啟動Activity的方法和過程。         在Android系統中

adb shell start啟動activity和service

命令視窗通過adb shell 進入android 的Linux命令介面,輸入am -help看到如下資訊: 我們可以通過命令啟動android中的Activity,Service,BroadcastReceiver 等元件     撥打一個電話:     am start

Android 在Service啟動Activity的大坑

在Activity中其中startActivity這個大家應該是非常熟悉的;那麼從service裡面呼叫startActivity

關於android 同時在activity啟動Service

同時在Activity中的onCreate();中呼叫startService(); bindService();Service的生命週期 這個截圖,我是先用startService(),接著bindService();

啟動另一個App/apkActivity(A應用開啟B應用)

Android提供了在一個App中啟動另一個App中的Activity的能力,這使我們的程式很容易就可以呼叫其他程式的功能,從而就豐富了我們App的功能。比如在微信中傳送一個位置資訊,對方可以點選這個位置資訊啟動騰訊地圖並導航。這個場景在現實中作用很大,尤其是朋友在陌生的環境找不到對方時,這個功能簡

Android外掛化技術之旅 1 開篇 - 實現啟動外掛與呼叫外掛Activity和Service

前言 Android技術如今已很成熟了,元件化、外掛化、熱修復等等框架層出不窮,如果只停留在單純的會用框架上,技術永遠得不到成長,只有懂得其原理,能夠婉婉道來,能夠自己手動寫出,技術才會得到成長,與其焦慮未來,不如把握現在。本篇將手寫教大家寫出外掛化框架,外掛化技術是Android高階工程師必備的技術之一,

使用彈窗風格的Activity實現萬能彈窗+Service隱式啟動Activity實現Service中彈窗

一、使用彈窗風格的Activity先看效果圖程式碼實現:1.在values資料夾的styles.xml中定義彈窗style<style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog"> <!--

Android動態部署六:如何從外掛apk啟動BroadcastReceiver和ContentProvider

實現Android動態部署的過程中最重要的是從外掛apk中啟動四大元件,經過前面幾篇文章的分析,現在只剩下BroadcastReceiver和ContentProvider了,BroadcastReceiver是可以通過java程式碼動態註冊的,可想而知

AndroidActivity四種啟動模式(launchMode)(面試必問)

android:launchMode standard 預設標準的啟動模式,每次startActivity(Intent intent)請求都建立一個新的activity實 例,適用於大多數場景。 singleTop 單一頂部,如果要啟動的activity在任務棧的頂部已經存在,不會建立新的例項,而是呼叫 o

Appiumactivity無法啟動問題

沒其他的要說的,其他的都在網上可以找到,我想補充的是修改AndroidManifest.xml配置檔案,這個檔案不是android.jar這個包下的 而是在當前測試的APK裡面的AndroidManifest.xml,可以請求android開發修改後幫你重新打一個包專門用於

android Activity啟動另一應用程式的方法,無需得到類名

在網上搜索了一會相關的實現程式碼,發現所有的文章都說是需要包名和類名。但是人家的程式,我們怎麼可能知道哪個是第一個啟動的Activity?所以,真正用在專案上,那種方法基本上沒什麼用的。於是檢視官方文件,發現這樣一個方法 public abstract Intent ge

同一程序activity啟動另一個activity的流程

在上一篇文章launcher介面點選應用圖示啟動Activity流程分析 中我們分析了在新程序中啟動activity的流程,這裡我們也順便介紹下在同一個程序的activity中啟動另一個activity,這種場景在實際應用中應該更為常見。都是啟動activity

取之有道——巧用Root權限 啟動其他APPActivity

權限設置 難點 圖標 mman 由於 lse xpl port 信任 這次博主來分享一個很巧妙的辦法來啟動其他APP中Activity的方法。 首先說一下這樣做的目的:最近博主在攻克一個技術難點,就是搞定某些三方系統中,對於應用權限的限制。為此給出用戶指導,引導用戶啟動系統

Activity A啟動Activity B,在B按Home回到主螢幕,按menu時呈現後臺app任務列表,如何讓剛退出的app的介面顯示為A,而不是退出時的B

先把實現方法說在最前: 要實現這個功能,最快捷方法就是在配置檔案AndroidManifest.xml中,在Activity A新增一句 android:launchMode="singleTask" 最初我是往Activity的生命週期方面想的,因為在B中按Home回到

BroadcastReceiver呼叫activity的函式

最近在做一個有關android的app,裡面要實現在BroadcastReceiver中接收了推送來的訊息之後,改變螢幕亮度。 但是改變螢幕亮度首先要呼叫當前Activity的getContentResolver(),但是無奈,我在BroadcastRec

Android實戰技巧之二十八:啟動另一個App/apkActivity

Android提供了在一個App中啟動另一個App中的Activity的能力,這使我們的程式很容易就可以呼叫其他程式的功能,從而就豐富了我們App的功能。比如在微信中傳送一個位置資訊,對方可以點選這個位置資訊啟動騰訊地圖並導航。這個場景在現實中作用很大,尤其是朋