設定に自動起動オプションがあるアプリケーションを作りたい。 PreferenceActivityから派生したアプリケーションで設定アクティビティを作成し、自動開始オプションのCheckBoxPreferenceを指定しました。自動起動オプションが有効になっている場合、電話の起動が完了したときにアプリケーションが起動するはずです。また、自動起動オプションが無効になっている場合は、起動が完了したときに起動しないでください。
これを実現するために、BOOT_COMPLETEDインテントを受信するBroadcastReceiverの派生クラスを実装し、AndroidManifest.xmlでレシーバーを宣言し、AndroidManifest.xmlでアクセス許可を付与しました。
アプリケーションにもApplicationの派生クラスがあり、アプリケーション派生クラスのonCreateメソッドからもサービスを開始します。 AndroidManifest.xmlでレシーバーを宣言すると、起動後にアプリケーションのonCreateが呼び出され、その後に呼び出されます。 BroadcastReceiverのonReceiveメソッドが呼び出されました。
問題は、自動起動が有効か無効かに関係なく、起動が完了するたびにアプリケーションが起動することです。自動起動が無効になっているときにアプリケーションを起動しないことは可能ですか?
共有設定を使用してisAutoStartEnabled
のブール値を格納し、この値をBroadcastReciverで確認して、trueの場合にのみインテントを起動できます。
あなたの場合、問題はあなたが放送を受信するかどうかではなく、誰が放送を受信するかです。幸運を祈ります。
お役に立てば幸いです。
Android 3.1以降 _BOOT_COMPLETED
_インテントを受信するBroadcastReceiverは機能しないと思います。ユーザーは、アプリケーションを操作して、アプリケーションを起動する必要があります。
したがって、デバイスを起動した後、すべてのサードパーティアプリケーションは停止として横たわっています。
また、現在のアプリケーションでは、SharedPreferences
を使用してアプリケーションを自動起動できます。
PDATE:(Androidバージョン3.1より前のバージョンの場合のみ動作しますが、起動後にアプリケーションをユーザーが操作する必要がありますデバイスで完了)
_Android.intent.action.BOOT_COMPLETED
_インテントでBroadcastReceiver
を使用する必要があります。
マニフェストファイルに以下を追加します。
_<receiver Android:name="App_Receiver">
<intent-filter>
<action Android:name="Android.intent.action.BOOT_COMPLETED" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
_
BoradcastRecieverを実装するApp_Receiverクラス。 onReceive()
メソッドを実装し、アプリからお気に入りのアクティビティを開始します。
_public void onReceive(Context context, Intent intent) {
// make sure you receive "BOOT_COMPLETED"
// Here isAutoStartEnabled check sharedPreferences for Auto Start flag
if ( isAutoStartEnabled ) {
if ((intent.getAction() != null) && (intent.getAction().equals("Android.intent.action.BOOT_COMPLETED")))
{
// Start the service or activity
}
}
_
使用許可を追加する必要がありますAndroid.permission.RECEIVE_BOOT_COMPLETED
マニフェストで。
次のコードは私のために働きます:
public class BootCompleteReceiver extends BroadcastReceiver {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("Android.intent.action.BOOT_COMPLETED")) {
Log.d("boot completed", "boot completed caught");
Boolean autoRestart = false;
SharedPreferences sp = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
autoRestart = sp.getBoolean("autoRestart", false);
if (autoRestart){
Log.d("boot completed", "auto restart true");
Intent i = new Intent(context, WelcomeScreen.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
}
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE);
boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false);
if ( isAutoStartEnabled ) {
startActivity(new Intent());
}
これがお役に立てば幸いです