【问题标题】:open my android program after update更新后打开我的android程序
【发布时间】:2013-02-23 21:31:08
【问题描述】:

我使用https://stackoverflow.com/a/14353076/1327384 更新我的android 程序,但是在更新我的程序后它将被关闭,所以我想在完成更新过程后重新打开它,我该怎么做?

我用过这个类

package services;
    public class PackageChangeReceiver extends BroadcastReceiver {
         @Override
            public void onReceive(Context ctx, Intent intent) {
            Uri data = intent.getData();
            boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);

            Intent intent1 = new Intent(ctx, service.class);
            ctx.startService(intent1);
            Log.d("service", "Action: " + intent.getAction());
            Log.d("service", "The DATA: " + data);
            }

    }

还有这场盛会

 <receiver android:name="services.PackageChangeReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <action android:name="android.intent.action.PACKAGE_ADDED" />

                <data android:scheme="package" />
            </intent-filter>
        </receiver>

但我手动启动应用程序后仍然收到意图

【问题讨论】:

  • 你找到解决方案了吗?

标签: android updates


【解决方案1】:

a) 看看android.intent.action.PACKAGE_REPLACED

b) 我相信如果您的应用有粘性服务,那么该服务会在包更新后重新启动。

【讨论】:

  • 粘性服务是什么意思
  • 2forshubi:我的意思是:developer.android.com/reference/android/app/…
  • 我尝试使用 android.intent.action.PACKAGE_REPLACED。但是我打开程序后它就可以工作了,所以我希望它在那之前可以工作,我该怎么做?
  • 试试这个粘性服务。它将重新启动,因此您可以在其中做任何您需要的事情。
  • 我试过了,但是手动运行程序就可以了,我希望直接更新后也可以运行
【解决方案2】:

可能是AlarmManager可以帮忙吗?您可以设置任务以启动应用程序的活动,例如在您的 apk 下载并用户单击安装后 40 秒内。

【讨论】:

    【解决方案3】:

    适用于 API 级别 12 及以上

    只需注册一个广播接收器即可仅在您的应用程序包更新时接收呼叫。

    public class PackageUpdateReceiver extends BroadcastReceiver {
    
       @Override
       public void onReceive(Context context, Intent intent) {
           //get the launch activity or any activity you want to open 
           Intent i = getBaseContext().getPackageManager().
                   getLaunchIntentForPackage(getBaseContext().getPackageName());
           i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
           i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(i);
       }
    }
    

    确保在清单中注册广播接收器!

        <receiver android:name=".receivers.PackageUpdateReceiver">
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
            </intent-filter>
        </receiver>
    

    现在适用于 API 级别

    您必须通过替换清单中的操作名称来注册通用包更新接收器,如下所示,

    MY_PACKAGE_REPLACED with PACKAGE_REPLACED
    

    并在 BroadcastReceiver 的 onReceive() 方法中检查它是否是您应用程序的包名,

    if (intent.getDataString().contains("com.your.app")){
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多