我目前在我的应用程序中面临一个问题,即应用程序升级接收器被多次调用。下面是清单代码:
<receiver android:name=".receiver.UpgradeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.example" />
</intent-filter>
</receiver>
升级Receiver.java
public Context context;
private static final String TAG = "UpgradeReceiver";
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (null == intent) {
return;
}
String action = intent.getAction();
Log.i(TAG, "Upgrade_Intent_Package[" + intent.getPackage() + "]");
Bundle bundle = intent.getExtras();
StringBuilder str = new StringBuilder();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
str.append(key);
str.append(":");
str.append(bundle.get(key));
}
}
Log.i(TAG, str.toString());
if (Constants.UPGRADE_COMPLETED.equalsIgnoreCase(action)) {
}
}
}
我正在尝试使用应用程序包过滤升级广播意图,以便只有当我的应用程序升级时接收器才会执行。
我尝试在清单中的路径标记下设置应用程序包名称,但没有帮助。此外,我还尝试使用intent.getPackage()从意图中提取包名,但它返回 null。但是,Android 声明:
广播操作:已安装应用程序包的新版本,替换之前安装的现有版本。数据包含包的名称。
我无法弄清楚为什么我的应用程序包名称为空。任何帮助将不胜感激。