android監(jiān)聽安裝和卸載示例
BroadcastReceiver 是系統(tǒng)全局廣播監(jiān)聽類, 其主要方法是onReceive(),自定義的廣播類繼承于它并實(shí)現(xiàn)自己的onReceive()處理邏輯
BroadcastReceiver 使用前,需要進(jìn)行注冊(cè)監(jiān)聽(xml和代碼兩種方式),不使用時(shí)需要注銷監(jiān)聽,其生命周期一般為整個(gè)應(yīng)用的生命周期
1, 自定義廣播
自定義廣播MyInstalledReceiver繼承自BroadcastReceiver,實(shí)現(xiàn)其onReceive()方式,具體代碼如下:
public class MyInstalledReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) { // install
String packageName = intent.getDataString();
Log.i("homer", "安裝了 :" + packageName);
}
if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) { // uninstall
String packageName = intent.getDataString();
Log.i("homer", "卸載了 :" + packageName);
}
}
}
2, 注冊(cè)監(jiān)聽
1) xml 方式
在AndroidManifest.xml 配置文件的Application節(jié)點(diǎn)下,添加自定義的注冊(cè)監(jiān)聽 MyInstalledReceiver
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.homer.installed"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyInstalledReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
在AndroidManifest.xml 添加的注冊(cè)監(jiān)聽,其生命周期默認(rèn)是整個(gè)應(yīng)用的生命周期
2) 代碼方式
一般在Activity的onStart()方法中注冊(cè)監(jiān)聽,在onDestroy()方法中注銷監(jiān)聽(也可以在onStop()方法中注銷,其生命周期注銷時(shí)結(jié)束)
@Override
public void onStart(){
super.onStart();
installedReceiver = new MyInstalledReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PACKAGE_ADDED");
filter.addAction("android.intent.action.PACKAGE_REMOVED");
filter.addDataScheme("package");
this.registerReceiver(installedReceiver, filter);
}
@Override
public void onDestroy(){
if(installedReceiver != null) {
this.unregisterReceiver(installedReceiver);
}
super.onDestroy();
}
以上xml和代碼兩種注冊(cè)方式,使用時(shí)選擇其一即可;
如果同時(shí)使用兩種方式,則兩種方式都有效,即一次安裝或卸載均統(tǒng)計(jì)了兩次(重復(fù)統(tǒng)計(jì))
3, 結(jié)果測(cè)試
相關(guān)文章
Flutter數(shù)字切換動(dòng)畫實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了Flutter數(shù)字切換動(dòng)畫實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Flutter?webview與網(wǎng)頁(yè)通訊交互實(shí)現(xiàn)
最近要在Flutter項(xiàng)目的基礎(chǔ)上加一個(gè)實(shí)時(shí)定位的功能,下面這篇文章主要給大家介紹了關(guān)于Flutter?webview與網(wǎng)頁(yè)通訊交互實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04android 監(jiān)聽SD卡文件變化的實(shí)現(xiàn)代碼
這篇文章主要介紹了android 監(jiān)聽SD卡文件變化的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-11-11Android實(shí)現(xiàn)微信首頁(yè)左右滑動(dòng)切換效果
這篇文章主要介紹了Android實(shí)現(xiàn)微信首頁(yè)左右滑動(dòng)切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Android NDK開發(fā)(C語(yǔ)言基本數(shù)據(jù)類型)
這篇文章主要介紹了Android NDK開發(fā)中,C語(yǔ)言基本數(shù)據(jù)類型,主要以C語(yǔ)言包含的數(shù)據(jù)類型及基本類型展開相關(guān)資料,需要的朋友可以參考一下2021-12-12Android應(yīng)用中拍照后獲取照片路徑并上傳的實(shí)例分享
這篇文章主要介紹了Android應(yīng)用中拍照后獲取照片路徑并上傳的實(shí)例分享,文中使用MultipartEntityBuilder制作了一個(gè)簡(jiǎn)單的上傳工具,需要的朋友可以參考下2016-03-03Android開發(fā)在RecyclerView上面實(shí)現(xiàn)"拖放"和"滑動(dòng)刪除"-2
這篇文章主要介紹了Android開發(fā)在RecyclerView上面實(shí)現(xiàn)"拖放"和"滑動(dòng)刪除"(二)功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03Android listview數(shù)據(jù)顯示及提示信息的實(shí)例
這篇文章主要介紹了Android listview數(shù)據(jù)顯示及提示信息的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05五分了解Android?Progress?Bar進(jìn)度條加載
這篇文章主要為大家介紹了Android?Progress?Bar進(jìn)度條加載的實(shí)現(xiàn)及屬性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02