web-dev-qa-db-ja.com

Android)で起動が完了した後、アプリケーションを自動起動します

設定に自動起動オプションがあるアプリケーションを作りたい。 PreferenceActivityから派生したアプリケーションで設定アクティビティを作成し、自動開始オプションのCheckBoxPreferenceを指定しました。自動起動オプションが有効になっている場合、電話の起動が完了したときにアプリケーションが起動するはずです。また、自動起動オプションが無効になっている場合は、起動が完了したときに起動しないでください。

これを実現するために、BOOT_COMPLETEDインテントを受信するBroadcastReceiverの派生クラスを実装し、AndroidManifest.xmlでレシーバーを宣言し、AndroidManifest.xmlでアクセス許可を付与しました。

アプリケーションにもApplicationの派生クラスがあり、アプリケーション派生クラスのonCreateメソッドからもサービスを開始します。 AndroidManifest.xmlでレシーバーを宣言すると、起動後にアプリケーションのonCreateが呼び出され、その後に呼び出されます。 BroadcastReceiverのonReceiveメソッドが呼び出されました。

問題は、自動起動が有効か無効かに関係なく、起動が完了するたびにアプリケーションが起動することです。自動起動が無効になっているときにアプリケーションを起動しないことは可能ですか?

12
Khushbu Shah

共有設定を使用してisAutoStartEnabledのブール値を格納し、この値をBroadcastReciverで確認して、trueの場合にのみインテントを起動できます。

あなたの場合、問題はあなたが放送を受信するかどうかではなく、誰が放送を受信するかです。幸運を祈ります。

お役に立てば幸いです。

10
R.daneel.olivaw

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 
    }
}
_
6
user370305

使用許可を追加する必要がありますAndroid.permission.RECEIVE_BOOT_COMPLETEDマニフェストで。

6
Kammaar

次のコードは私のために働きます:

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

            }
        }
    }

}
1
ksu
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE);
        boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false);

        if ( isAutoStartEnabled ) {
            startActivity(new Intent());
        } 

これがお役に立てば幸いです

1
Nishant Shah