日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 通过广播唤醒被杀死的app

發布時間:2024/4/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 通过广播唤醒被杀死的app 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



今天,簡單講講如何喚醒被殺死的app。


這個喚醒app主要通過廣播來喚醒。


1. 靜態廣播喚醒

廣播的exported屬性和enabled屬性

  • exported默認為true表示這個廣播可以接收來自其他app發送的廣播,只要條件滿足,exported設置成false表示只能是這個app內發送的廣播才能接收,即使是receiver的進程和發送廣播的進程不是同一個,但是只要都是屬于一個app的就可以正常接收,有時候會遇到發送者和接收者不在一個進程,廣播沒辦法正常接收,這是因為receiver所在的進程是死的,如果通過某種方式把receiver所在的進程喚醒,那么即使exported為false也能正常接收
  • enabled為true表示廣播可用,為false表示禁用廣播,禁用后廣播將無法接收

  • 靜態的系統廣播

    靜態的系統廣播,例如:開機廣播,用戶開屏廣播,USB插入和拔出廣播等這類廣播在app運行期間可以用靜態注冊的廣播正常接收,但是在app被殺死后就無法收到了,android系統做了屏蔽,把被殺死的app的系統靜態廣播都過濾了,所以想讓app被殺死后仍然通過靜態注冊的廣播接收系統廣播是做不到的


    自定義廣播

    我們一般發廣播都是局限在app內部,所以通常都是這么發的:

    Intent intent = new Intent(); intent.setAction("my.broadcast.test"); sendBroadcast(intent);


    或者這么發:

    Intent intent = new Intent(context, TestBroadcastReceiver.class); sendBroadcast(intent);


    上面這兩種廣播的發送方式在app被殺死后都無法收到廣播

    但是采用下面這種方式發送廣播即使app被殺死后,靜態廣播也能正常收到:
    發送廣播方的app,包名:com.syncpush.demo

    Intent intent = new Intent();Context c = null;try {c = createPackageContext("com.example.broadcasttest", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();} // intent.setPackage(getPackageName()); // intent.setComponent(pkgName, className); // intent.setComponent(pkgNameContext, className);intent.setClassName(c, "com.example.broadcasttest.TestBroadcastReceiver"); // intent.setClassName("com.example.broadcasttest", "com.example.broadcasttest.TestBroadcastReceiver");intent.setAction("my.broadcast.test");intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);sendBroadcast(intent);

    ntent.setClassName(“com.example.broadcasttest”, “com.example.broadcasttest.TestBroadcastReceiver”)聲明接收的廣播或者用intent.setClassName(c, “com.example.broadcasttest.TestBroadcastReceiver”),但是這個Context是接收廣播方app的Context,所以通過createPackageContext(“com.example.broadcasttest”, Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY)根據包名來獲取到app的Context

    接收廣播方的app,包名com.example.broadcasttest


    其實主要的耗還是Intent的廣播添加了FLAG_EXCLUDE_STOPPED_PACKAGES標志,這樣,手機就會把廣播發送給停止運行的app。這里還可以簡單寫成這樣的代碼:

    Intentintent = new Intent("com.baidu.tieba.action.INVOKE"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//3.1以后的版本直接設置Intent.FLAG_INCLUDE_STOPPED_PACKAGES的value:32if (android.os.Build.VERSION.SDK_INT>= 12) {intent.setFlags(32);}intent.putExtra("type", "frs");intent.putExtra("fname", "李毅");activity.sendBroadcast(intent);


    如果你的項目依賴的Android SDK是3.1以下版本,是需要判斷的。android 3.0之前是沒有FLAG_EXCLUDE_STOPPED_PACKAGES標志。

    public class TestBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();Toast.makeText(context, "action:" + action, Toast.LENGTH_LONG).show();Log.i("TestBroadcastReceiver", "action:" + action);} }// 配置文件 <receiver android:name="com.example.broadcasttest.TestBroadcastReceiver"android:exported="true"android:enabled="true"><intent-filter><action android:name="android.intent.action.USER_PRESENT" /> <!-- 手機開屏廣播 --></intent-filter><intent-filter><action android:name="my.broadcast.test" /> <!-- 自定義廣播 --></intent-filter></receiver>


    接收放廣播的配置要把exported設置成true,否則就無法收到app以外的廣播發送,只能收到app內部的廣播發送


    廣播喚醒的缺陷

    以上通過廣播喚醒在一些手機上可以正常喚醒app,例如小米3;但是在魅族手機上就沒辦法喚醒了,需要到安全中心把app的自啟動權限開啟后才能正常喚醒,由此可見,一些手機廠商可能對于靜態廣播的接收做了一些優化導致靜態廣播還是沒辦法被接收,所以會喚醒失敗

    關于intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)

    這個網上說是設置了就能保證即使app被殺死后,也能正常接收廣播,但是我在小米手機上測了下,沒有用,即使沒設置,但是采用intent.setClassName()后,app殺死后也能正常接收廣播,后來懷疑是不是默認就是Intent.FLAG_INCLUDE_STOPPED_PACKAGES,于是就intent.setFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES),意思是app被殺死后就不接收廣播,但是廣播照樣能正常接收,所以跟intent.setFlags()貌似沒關系,但是小米手機系統是定制的,我不敢保證他們是不是對這方面做了修改,目前沒有在原生的android系統上試過intent.setFlags()的有效性


    這些是我把網上的資料整理的,大家自己也可以去查找一下。其實還可以通過Service喚醒app。


    android 通過廣播喚醒被殺死的app就講完了。


    就這么簡單。

    

    總結

    以上是生活随笔為你收集整理的android 通过广播唤醒被杀死的app的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 一本到视频 | 免费毛片一级 | 少妇与公做了夜伦理 | 久久久久久国产精品 | 玖玖玖精品 | 人妻少妇一区二区三区 | 天天干视频在线观看 | 轮番上阵免费观看在线电影 | 欧美在线激情 | 欧美成人三级伦在线观看 | 国精品一区二区三区 | 国产精品一区二区三区四区在线观看 | 一级全黄裸体片 | 色91av | 视频一区在线观看 | 一本大道久久a久久综合婷婷 | 黄色顶级片 | 亚洲精品一区二区三区四区 | 欧美激情影院 | 亚洲女人天堂色在线7777 | 国产做爰免费观看视频 | 少妇一级淫片免费 | 中文字幕日韩精品无码内射 | 亚洲成人精品在线 | 男人猛进女人爽的大叫 | 日韩高清专区 | 日日碰狠狠添天天爽无码av | 成年激情网 | 免费视频久久 | 天天摸日日摸狠狠添 | 99精品国自产在线 | 美女扒开粉嫩的尿囗给男生桶 | 国产粉嫩呻吟一区二区三区 | 手机免费看av片 | 日本成人免费在线视频 | 99国产精品久久久久 | 久久久久无码精品国产sm果冻 | 国产51自产区 | 91夫妻视频 | 精品少妇视频 | 国产精品视频一区二区三 | 日本成人在线网站 | 午夜性视频| www.999热| 欧美日韩卡一卡二 | 久操新在线| 韩国中文字幕在线观看 | 成人av动漫 | 久久久久久免费 | 伊人中文在线 | 在线观看中文字幕码 | 亚洲欧美www| 日本在线一| 91浏览器在线观看 | 91亚洲专区| 国内自拍视频在线观看 | 黄色成人在线免费观看 | 国产伦精品一区二区三区妓女 | 国产精品爽爽久久久久久 | 激情开心站 | 国产乱free国语对白 | 中文字幕91在线 | 午夜少妇av | 91看片黄色 | 真人毛片97级无遮挡精品 | 99热精品久久 | 69精品人人人人 | 韩国一级淫片免费看 | 咪咪色图 | 日韩欧美在线看 | 男男受被啪到高潮自述 | 精品无码国产一区二区三区51安 | 午夜精品一区二区三区在线视频 | 老熟女一区二区三区 | аⅴ天堂中文在线网 | 男人av影院| 落日余晖图片 | 欧美精品videosex极品 | 美女色网站 | av免费网 | 91综合久久| 九九精品国产 | 一区二区三区在线电影 | 亚洲性欧美色 | 毛片的网址| 男人的亚洲天堂 | 女人私密又肥又大 | 精品福利在线 | 国产精品手机在线 | 日韩欧美国产电影 | 人成在线免费视频 | 2019国产精品| 成人在线三级 | 黄色一级视频片 | 99夜色| 国产日 | 黄色片子网站 | 91精品国产麻豆 | 中年夫妇啪啪高潮 |