web-dev-qa-db-ja.com

起動時にアプリを起動する方法

サンプルコードを この のリンクで使用してみましたが、古すぎるようで、うまくいきませんでした。では、Androidの起動が完了したときにアプリに自動的に起動させるには、どのような変更を加え、どのファイルに変更を加える必要がありますか。

216
Poojan

まず、あなたのAndroidManifest.xmlに許可が必要です。

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED" />

また、yourAndroidManifest.xmlで、サービスを定義し、BOOT_COMPLETEDアクションを待ちます。

<service Android:name=".MyService" Android:label="My Service">
    <intent-filter>
        <action Android:name="com.myapp.MyService" />
    </intent-filter>
</service>

<receiver
    Android:name=".receiver.StartMyServiceAtBootReceiver"
    Android:label="StartMyServiceAtBootReceiver">
    <intent-filter>
        <action Android:name="Android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

次に、BOOT_COMPLETEDアクションを取得してサービスを開始する受信機を定義する必要があります。

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }
    }
}

そして今、あなたのサービスは電話が起動したときに実行されているはずです。

297
Sean Schulte

これは、Androidデバイスの再起動後にactivityの実行を開始する方法です。

このコードをAndroidManifest.xmlファイルの<application>要素内に挿入します(<activity>要素内のnot):

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver
    Android:enabled="true"
    Android:exported="true" 
    Android:name="yourpackage.yourActivityRunOnStartup"
    Android:permission="Android.permission.RECEIVE_BOOT_COMPLETED">

    <intent-filter>
        <action Android:name="Android.intent.action.BOOT_COMPLETED" />
        <action Android:name="Android.intent.action.QUICKBOOT_POWERON" />
        <category Android:name="Android.intent.category.DEFAULT" />
    </intent-filter>

</receiver>

次に、新しいクラスyourActivityRunOnStartupを作成します(マニフェストのAndroid:name要素に指定された<receiver>と一致)。

package yourpackage;

import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;

public class yourActivityRunOnStartup extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

}

注:アクティビティはアクティビティ外のコンテキストから起動されるため、呼び出しi.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);は重要です。これがなければ、活動は開始されません。

また、Android:enabledタグの値Android:exportedAndroid:permission、および<receiver>は必須ではないようです。アプリはこれらの値なしでイベントを受け取ります。こちらの例 をご覧ください

108
thrylos

ACTION_BOOT_COMPLETE を聞いて、そこから必要なことをしてください。ここに コードスニペット があります。

更新:

回答時の元のリンクは停止しているため、コメントに基づいて、ここではリンクされたコードです。リンクが停止したときにコードを見逃すことはありません。

AndroidManifest.xml(アプリケーションパート)の場合:

<receiver Android:enabled="true" Android:name=".BootUpReceiver"
        Android:permission="Android.permission.RECEIVE_BOOT_COMPLETED">

        <intent-filter>
                <action Android:name="Android.intent.action.BOOT_COMPLETED" />
                <category Android:name="Android.intent.category.DEFAULT" />
        </intent-filter>
</receiver>

...

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED" />

...

public class BootUpReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent i = new Intent(context, MyActivity.class);  //MyActivity can be anything which you want to start on bootup...
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);  
        }

}

ソース: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup

55
Haphazard

また、起動時にAndroidアプリケーションを起動するためにコードを変更したくない場合は、AutoStartのようなアプリを使用できます。 AutoStart - No root

10
Tony

Seanの解決策は当初私にはうまくいきませんでした(Android 4.2.2)。私は同じAndroidプロジェクトにダミーのアクティビティを追加し、少なくとも1回はデバイス上でそのアクティビティを手動で実行する必要がありました。その後、Seanのソリューションは機能し始め、その後の再起動後にBroadcastReceiverに通知されました。

2
ole

もう1つの方法は、Android.intent.action.USER_PRESENTの代わりにAndroid.intent.action.BOOT_COMPLETEDを使用して、ブートプロセス中の速度低下を回避することです。ただし、これは、ユーザーがロック画面を有効にしている場合のみtrueです。それ以外の場合、このインテントはブロードキャストされません。

リファレンスブログ- AndroidのACTION_USER_PRESENT意図の問題

0
user2627118

screenshot

この質問に、私が数日間直面していた点を1つ追加したいと思います。私はすべての答えを試しましたが、それらは私のために働いていませんでした。 Androidバージョン5.1を使用している場合は、これらの設定を変更してください。

Androidバージョン5.1を使用している場合は、アプリ設定から(起動を制限する)選択を解除する必要があります。

設定>アプリ>あなたのアプリ>起動を制限する(選択解除)

0
Manish Yadav