我有应用列表。我想当用户删除任何应用程序然后刷新应用程序列表。 最好的方法是什么?我使用广播接收器搜索并找到解决方案,这是最好的方法吗?或者有直接的方法吗?我可以捕获Action删除意图的结果吗?
答案 0 :(得分:1)
首先,您应该为该事件添加监听器,如下所示,如果您只对删除感兴趣,只需添加,
<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"));