【问题标题】:How to receive broadcast itself when my application updated with new version code android当我的应用程序使用新版本代码 android 更新时如何接收广播本身
【发布时间】:2016-07-21 10:09:44
【问题描述】:

我有一个应用程序,它通过更改版本代码远程更新为新版本。从后端推送更新,手机使用 adb OTA 客户端更新 apk。

OTA 更新完成后,我需要以编程方式使用应用程序将状态发送到后端。

我可以使用实际接收包更改或删除相关意图操作的启动器来执行此操作,然后启动主应用程序。然后应用程序将 OTA 更新状态发送到后端,无需任何用户交互。 这是示例代码。 在启动器应用清单中:

 <receiver android:name=".receivers.PackageChangedReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <action android:name="android.intent.action.PACKAGE_CHANGED" />
                <data android:scheme="package"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

这里是接收器:

 @Override
    public void onReceive(Context context, Intent intent) {
        String packageName=intent.getData().getEncodedSchemeSpecificPart();
        if(packageName.contains(context.getString("packagename")))
        context.startActivity(new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK));
    }

现在我的问题是,在 OTA 更新后,我如何才能执行相同的操作,例如启动主应用程序并仅使用主应用程序发送 OTA 更新状态,而无需在应用程序中进行任何启动器和用户交互?

【问题讨论】:

  • 我不明白你的问题。你说你已经在做这些事情,然后你问怎么做?请详细说明您在做什么和不做什么,但需要帮助。
  • @DavidWasser 是的,我可以使用像启动器应用程序这样的第三方应用程序来做到这一点,该应用程序实际上负责接收主应用程序包更改广播状态并将其发送到后端。我的问题是我可以在没有任何第三方应用程序帮助的情况下做同样的事情吗?仅使用我的主应用程序。

标签: android broadcastreceiver auto-update android-launcher ota


【解决方案1】:

您可以让自己的应用程序捕获广播Intent,就像启动器应用程序一样。然后你可以做你想做的事。在您的应用程序中创建一个BroadcastReceiver 并将这些条目添加到清单中:

 <receiver android:name=".MyBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_CHANGED" />
        </intent-filter>
    </receiver>

您不需要&lt;category&gt;&lt;data&gt; 标签,监听PACKAGE_REMOVED 毫无意义,因为如果您的应用被删除,您无论如何都不会被触发。

【讨论】:

  • 我无法从我的应用程序本身接收广播接收器。我已经在我的应用程序中实现了这一点并将其安装在设备中,然后首先卸载包(adb 卸载包名),然后安装 apk(adb install apk),但安装后我无法在 BroadcastReceiver 中获得任何日志。这意味着 BroadcastReceiver 没有调用。
  • 不,如果您卸载然后重新安装,这将不起作用。您在问题中说您正在进行 OTA“更新”。我假设您正在更新现有应用程序。如果您的应用被卸载然后重新安装,您将无法执行任何操作,因为您的应用需要先手动启动才能执行任何操作。
  • 如果您不想使用第三方工具来管理这个,您可以自己编写另一个应用程序。该应用程序将安装在设备上,它会监视应用程序的安装/删除,它可以在安装时自动启动您的应用程序,并可以自动更新您的服务器(就像第 3 方应用程序一样)。不过,这必须是一个单独的应用程序。
  • 是的,我已经完成了这项工作并且工作正常。问题是我只需要在设备中有一个应用程序。没有第三方应用程序。顺便感谢您的帮助。
  • 如果应用程序被卸载并重新安装,则无法使用单个应用程序完成此操作。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
相关资源
最近更新 更多