在 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/apk中的Activity(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程式碼動態註冊的,可想而知
Android中的Activity四種啟動模式(launchMode)(面試必問)
android:launchMode standard 預設標準的啟動模式,每次startActivity(Intent intent)請求都建立一個新的activity實 例,適用於大多數場景。 singleTop 單一頂部,如果要啟動的activity在任務棧的頂部已經存在,不會建立新的例項,而是呼叫 o
Appium中的activity無法啟動問題
沒其他的要說的,其他的都在網上可以找到,我想補充的是修改AndroidManifest.xml配置檔案,這個檔案不是android.jar這個包下的 而是在當前測試的APK裡面的AndroidManifest.xml,可以請求android開發修改後幫你重新打一個包專門用於
android Activity中啟動另一應用程式的方法,無需得到類名
在網上搜索了一會相關的實現程式碼,發現所有的文章都說是需要包名和類名。但是人家的程式,我們怎麼可能知道哪個是第一個啟動的Activity?所以,真正用在專案上,那種方法基本上沒什麼用的。於是檢視官方文件,發現這樣一個方法 public abstract Intent ge
同一程序activity中啟動另一個activity的流程
在上一篇文章launcher介面點選應用圖示啟動Activity流程分析 中我們分析了在新程序中啟動activity的流程,這裡我們也順便介紹下在同一個程序的activity中啟動另一個activity,這種場景在實際應用中應該更為常見。都是啟動activity
取之有道——巧用Root權限 啟動其他APP中的Activity
權限設置 難點 圖標 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/apk中的Activity
Android提供了在一個App中啟動另一個App中的Activity的能力,這使我們的程式很容易就可以呼叫其他程式的功能,從而就豐富了我們App的功能。比如在微信中傳送一個位置資訊,對方可以點選這個位置資訊啟動騰訊地圖並導航。這個場景在現實中作用很大,尤其是朋