0

我目前在我的应用程序中面临一个问题,即应用程序升级接收器被多次调用。下面是清单代码:

<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 声明:

广播操作:已安装应用程序包的新版本,替换之前安装的现有版本。数据包含包的名称。

我无法弄清楚为什么我的应用程序包名称为空。任何帮助将不胜感激。

4

1 回答 1

1

intent.getPackage()返回此意图专门针对的包/应用程序,但它已发送给任何感兴趣的接收者,因此没有这样的包。

使用intent.getData()which 返回更新的包作为Uri

于 2013-06-17T11:22:01.647 回答