5

デバイスが起動したときにアラームを開始したいので、次のことを行いました

1) ユーザー権限

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

2) マニフェスト ファイルにインテント アクションを含むレシーバーを追加する

 <receiver
            android:name=".sms.BootReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" >
                </action>

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

3) ソース

public class BootReceiver extends BroadcastReceiver {

    private AlarmManager dayAlarmMgr;
    private PendingIntent dayAlarmIntent;
    private NotificationManager mNotificationManager;
    private NotificationCompat.Builder builder;
    private Context context;
    public static final int NOTIFICATION_ID = 2;

    @Override
    public void onReceive(Context context, Intent intent) {

         if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
                    Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
           }
    }
}

上記のコードはgenymotionでは機能していますが、実際のデバイスでは機能していません

4

5 に答える 5

3

助けてくれてありがとう、しかし最終的には、内部メモリに保存されているアプリケーションの起動完了としてandroid.intent.action.BOOT_COMPLETED設定することで機能させることができました。android:installLocation="internalOnly"

于 2015-01-29T17:05:48.167 に答える
1

問題はandroid:name=".sms.BootReceiver"、そうあるべきだということandroid:name=".BootReceiver"です。ただし、一部のデバイスはキャッチしませんBOOT_COMPLETED。あなたintent-filterは次のようになるはずです:

<intent-filter>
   <action android:name="android.intent.action.BOOT_COMPLETED" />
   <action android:name="android.intent.action.QUICKBOOT_POWERON" />
   <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>

ソースを編集することを忘れないでください。

if ((intent.getAction().equals("android.intent.action.BOOT_COMPLETED") 
   || intent.getAction().equals("android.intent.action.QUICKBOOT_POWERON")
   || intent.getAction().equals("com.htc.intent.action.QUICKBOOT_POWERON"))){
      Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
}
于 2015-01-22T11:09:01.410 に答える
0

アプリケーションに 1 つのアクティビティが存在することを確認してください。Android 3.1 から、BroadcastReceiver は、ユーザーが手動でアクティビティを開始するまで機能しません。ユーザーがアプリを初めて実行すると、強制停止しない限り、BroadcastReceiver は常に実行されます。アクティビティが最初に起動されると、デバイスを再起動した後でもブロードキャスト レシーバーが実行されます。

エミュレーターでは動作しています - 3.1 よりも古いバージョンで実行されており、実際のデバイスは 3.1 よりも高いバージョンで実行されている可能性があります。

于 2015-01-22T12:13:48.087 に答える
-1
<receiver android:name="your.package.example.BootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
于 2015-01-22T11:15:48.630 に答える