- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的应用程序不在 Play 商店中,请在网络上验证是否有新版本并下载并启动它。安装后我想重新启动应用程序,并使用 BroadcastRecevier
和 ACTION_PACKAGE_REPLACED
。这是代码:
广播:
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)){
ApplicationInfo app = new ApplicationInfo();
if(app.packageName.equals("it.android.downloadapk")){
Intent LaunchIntent = context.getPackageManager().getLaunchIntentForPackage(app.packageName);
context.startActivity(LaunchIntent);
}
}
}
list :
<receiver android:name="it.android.downloadapk.Broadcast">
<intent-filter>
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED"></action>
<data android:scheme="package" android:path="it.android.downloadapk" />
</intent-filter>
</receiver>
问题是当我安装新的apk时,Broadcast似乎无法启动,为什么?
最佳答案
看到这个:
How to know my Android application has been upgraded in order to reset an alarm?
正确的解决方法是您在 list 中使用了错误的字符串: http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED
应该改为“android.intent.action.PACKAGE_REPLACED”。
好的,我看到我写的内容仍然不足以尝试,所以我将破例发布整个项目,以证明它有效:应用程序代码位于名为 "com.broadcast_receiver_test"的包中。不要忘记在测试之前运行它,否则它将无法在某些 android 版本上运行(我认为 API 11+)。
list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.broadcast_receiver_test" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity android:name=".BroadcastReceiverTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<data android:scheme="package" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
</application>
</manifest>
MyBroadcastReceiver.java:
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context,final Intent intent)
{
final String msg="intent:"+intent+" action:"+intent.getAction();
Log.d("DEBUG",msg);
Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();
}
}
请运行它,看看它是否完美运行。
编辑:如果您的应用适用于 API12 及更高版本,并且只希望处理应用更新的情况,您可以单独使用此 Intent :
http://developer.android.com/reference/android/content/Intent.html#ACTION_MY_PACKAGE_REPLACED
关于安卓 : restart application after update - ACTION_PACKAGE_REPLACED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728016/
我的应用程序不在 Play 商店中,请在网络上验证是否有新版本并下载并启动它。安装后我想重新启动应用程序,并使用 BroadcastRecevier 和 ACTION_PACKAGE_REPLACED
看似简单的问题,我想不出答案。应用程序单例类的 onCreate() 是否有可能在应用程序更新时不被触发? (更新可能通过版本升级的Android Studio)谢谢。 最佳答案 没有。 但是很可能在
我正在尝试设置一项服务来检查设备中何时安装了 Activity 的新更新。我已经在应用程序 Activity 中这样做了,在 list 中声明了 Broadcastreceiver 并且它工作得很好。
我是一名优秀的程序员,十分优秀!