Androidアプリケーションでインストール後の自動起動方法を実現します。


インターネットの多くの方法と同じように、放送手段を使用します。
ACTION_PACKAGE_ADDEDの新しいアプリケーションはすでにデバイスにインストールされています。データはパケット名を含んでいます。(最新にインストールされたパッケージはこのブロードキャストを受信できません。)
ACTION_PACKAGE_REPLACEDは、既存のバージョンを置き換えるために、新しいバージョンのアプリケーションをデバイスにインストールします。
ACTION_PACKAGE_CHANGEDはすでに存在しているアプリケーションパッケージの名前を含めて変更されました。
ACTION_PACKAGE_REMOVEDは既に存在しているアプリケーションパッケージをデバイスから削除しました。パッケージ名を含めて(インストールされているパッケージはこの放送を受信できません。)
ACTION_PACKAGE_RESTART EDユーザは、パッケージを再起動します。パケットのすべてのプロセスは殺されます。その接続された動作時間状態はすべて削除されるべきです。パケット名を含めます。(再スタートパッケージはこの放送を受信できません。)
ACTION_PACKAGE_DATA_CLEAREDユーザはもう一つのパケットのデータをクリアしました。パケット名を含みます。
直接的な考え方:放送受信を登録する上で必要なactionを実現する。
しかし、Android 3.1以降は、以下のような仕組みがあります。
force-stop in Manage Apple of Settings makes Appin a stopped state!
Here is what Google describes
What is Stoped State

Starting from Android 3.1, the system's package manager keeps track of applications that are in a stopped state and provides a means of controlling their launch from background processes and other applications.

Note that an application's stopped state is not the same as an Activity's stopped state. The system manages those two stopped states separately.
Why Android Adds this

Note that the system adds FLAG_EXCLUDE_STOPPED_PACKAGES to all broadcast intents. It does this to prevent broadcasts from background services from inadvertently or unnecessarily launching components of stoppped applications. A background service or application can override this behavior by adding the FLAG_INCLUDE_STOPPED_PACKAGES flag to broadcast intents that should be allowed to activate stopped applications.
As the above references point out it will prevent broadcast intens delivering to stopped packages.Actualy this control mechange safety and save energy.
Android 3.1 API
翻訳:
システム設定-アプリケーション管理における「強制停止」の役割は、アプリを停止状態にすることです。
以下はgoogleの公式説明です。
停止状態とは?
Andriod 3.1から、システム・パッケージ管理サービスは、停止状態にあるアプリを追跡し、バックグラウンド・プロセスまたは他のアプリケーションから起動するように制御する方法を提供します。
注意:アプリケーションの停止状態はactivityの停止状態とは異なります。システムはこれらの2種類の停止状態を別々に処理します。
なぜAndroidはこの機能を追加しますか?
システムは、放送を送信するすべてのIntentのデフォルトにFLAG__を追加しています。EXCLUDE_STOPEDマーク。バックグラウンドサービスからの放送を阻止するために、アプリケーションを停止したあるコンポーネントを起動しました。バックグラウンドサービスまたはアプリでもいいです。
放送のIntentオブジェクトにFLAG_を追加することによりINCLUDE_STOPED_PACKAGESフラグは、この挙動を上書き書き換えることにより、ブロードキャストが停止状態にあるアプリケーションをアクティブにすることができる。
上記の説明によると、システムはデフォルトでは停止状態のappがブロードキャストを受信するのを阻止する。この制御機構の目的は安全と電気量の節約です。
だから、アプリをインストールしてから起動することを実現するには、前提は
1、トリガACTION_PACKAGE_REPLACED放送(つまり、appカバーを差し替えてインストールして受信したもので、初めてインストールされた放送ACTION_u。PACKAGE_ADDEDは現在のインストールパッケージに触発されません。このアプリは実行されていませんので)
2、appプロジェクトでは静的登録放送を使用しています。(動的放送はappが実行されてから受け付けられますので)
3、アプリを実行したことがあります。つまりstoppedの状態ではありません。
Android 5.1の実機でテストする:
最初にインストールされたアプリは放送をトリガしません。
未実行のアプリを上書きインストールします。放送を開始しません。
運転アプリをインストールした後、Appを終了します。(リターンキーをクリックして、リターンタスクから削除します。このとき設定?アプリケーションで確認しても、appはまだstop状態にありません。)カバーインストール後、アプリは自動運転に成功しました。設置が実現されたとみてもいいです。
アプリを終了し、設定・アプリケーションで「強制停止」を行います。カバーインストール後、アプリは自動的に動作しませんでした。(設定-アプリケーションで確認します。アプリはstop状態です。
したがって、Appが動作している間に、直接にインストールされたappを上書きすると、放送受信機でインストールが完了したら自動的に起動することができます。少なくともandroid 5.1上にあります。^)
コードを簡単に紹介します。
(1)カスタムブロードキャスト受信機:

public class MyReceiver extends BroadcastReceiver {
 
	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		String localPkgName = context.getPackageName();//  MyReceiver   App   
		Uri data = intent.getData();
		String installedPkgName = data.getSchemeSpecificPart();//     Apk   ,   app        
		if((action.equals(Intent.ACTION_PACKAGE_ADDED)
				|| action.equals(Intent.ACTION_PACKAGE_REPLACED)) && installedPkgName.equals(localPkgName)){
			Intent launchIntent = new Intent(context,MainActivity.class);
			launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startActivity(launchIntent);
		}
	}
}
(2)Android Manifest.xmlにラジオ受信機を静的に登録する

<application
  android:allowBackup="true"
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name"
  android:theme="@style/AppTheme" >
  <activity
   android:name="com.example.mydemo.MainActivity"
  	android:configChanges="orientation|keyboard"
   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="com.example.mydemo.MyReceiver">
   <intent-filter>
    <action android:name="android.intent.action.PACKAGE_ADDED" /> 
    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    <action android:name="android.intent.action.PACKAGE_REMOVED" />
    <data android:scheme="package"/>
   </intent-filter>
  </receiver>
 </application>
以上のAndroidアプリケーションはインストール後に起動する方法を実現しました。小編集は皆さんのすべての内容を共有しています。参考にしていただければと思います。よろしくお願いします。