多次升级接收器触发器

时间:2013-06-17 10:18:46

标签: android android-intent android-activity android-resources android-broadcast

我目前在我的应用程序中遇到了多次调用应用程序升级接收器的问题。以下是清单代码:

<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>

UpgradeReceiver.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()从intent中提取包名称,但它返回null。但是,Android声明:

  

广播行动:已经有一个新版本的应用程序包   安装,替换以前的现有版本   安装。数据包含包的名称。

我无法弄清楚为什么我的应用程序包名称为null。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

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

使用intent.getData()将{(1}}

作为更新的软件包返回