1
我有應用程序列表。當用戶移除任何應用程序時,我想要刷新應用程序列表 最好的辦法是做什麼?我使用Broadcast Receiver搜索並找到解決方案,是最好的方法嗎?還是有直接的方式來做到這一點?我可以捕獲Action Remove intent的結果嗎?如何捕獲android應用程序包中的remove?
我有應用程序列表。當用戶移除任何應用程序時,我想要刷新應用程序列表 最好的辦法是做什麼?我使用Broadcast Receiver搜索並找到解決方案,是最好的方法嗎?還是有直接的方式來做到這一點?我可以捕獲Action Remove intent的結果嗎?如何捕獲android應用程序包中的remove?
首先,你應該添加監聽像下面這種情況下,如果僅僅只在刪除感興趣只想補充一點,只是,
<receiver
android:name=".receiver.AppStateReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.QUERY_PACKAGE_RESTART" />
<data android:scheme="package" />
</intent-filter>
</receiver>
那麼你可以添加廣播接收機這樣,
public class AppStateReceiver extends BroadcastReceiver {
public AppStateReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String packageName = intent.getData().getEncodedSchemeSpecificPart();
// Check if the application is install or uninstall and display the message accordingly
if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
} else if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
intent.setAction(intent.getAction());
Intent uninstallIntent = new Intent();
uninstallIntent.setAction("Uninstall");
uninstallIntent.putExtra("packageName", packageName);
LocalBroadcastManager.getInstance(context).sendBroadcast(uninstallIntent);
} else if (intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")) {
// Application Replaced
// toastMessage = "PACKAGE_REPLACED: " + intent.getData().toString() + getApplicationName(context, intent.getData().toString(), PackageManager.GET_UNINSTALLED_PACKAGES);
} else if (intent.getAction().equals("android.intent.action.QUERY_PACKAGE_RESTART")) {
}
}
}
當您在接收器中接到回撥時,只需發送一個本地廣播,您就可以聽取您的活動或片段或服務並根據該處理進行處理。
本地廣播聽衆在你的片段,
BroadcastReceiver UninstallReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateItems();
}
};
註冊和取消註冊廣播
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(UninstallReceiver);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(UninstallReceiver, new IntentFilter("Uninstall"));
此代碼需要的權限? –
我們不需要此接收器的許可。 –
我必須註冊廣播嗎?創造活動還是? –