6

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>

しかし、アプリを手動で起動した後もインテントを受け取ります

4

3 に答える 3

3

a) android.intent.action.PACKAGE_REPLACEDを見てください。

b) アプリにスティッキー サービスがある場合、このサービスはパッケージの更新後に再起動されると思います。

于 2013-02-23T21:59:26.250 に答える
1

AlarmManagerが役立つかもしれませんか? たとえば、apk がダウンロードされ、ユーザーがクリックしてインストールしてから 40 秒後に、アプリのアクティビティを開始するようにタスクを設定できます。

于 2013-02-23T21:52:06.930 に答える
0

For API Level 12 & above

Simply register a broadcast receiver to receive a call only when your application package is updated.

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);
   }
}

Make sure to register the broadcast receiverin the manifest!

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

Now for the API Level < 12

You have to register for a generic package update receiver by replacing action name in the manifest as below,

MY_PACKAGE_REPLACED with PACKAGE_REPLACED

And in the onReceive() method of the BroadcastReceiver check if it's your application's package name,

if (intent.getDataString().contains("com.your.app")){
...
}
于 2019-09-04T15:10:00.110 に答える