3

目覚まし時計機能のあるアプリで、broadcastReceiver を使用してアラームをトリガーします。クラスは現在非常に単純です

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent scheduledIntent = new Intent(context, AlarmUp.class);
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(scheduledIntent);

}}

問題は、デバイスの再起動時にキャンセルされるため、アラームがトリガーされないことです。再起動後に受信機を自動的に継続させる方法はありますか? どうも

4

2 に答える 2

4

再起動後に受信機を自動的に継続させる方法はありますか?

残念だけど違う。電話がオフになると、システムはすべての保留中のインテントを破棄します。

問題を解決するには、 をフィルタリングしandroid.intent.action.BOOT_COMPLETEDて、BroadcastReceiver呼び出されたデバイスの起動を行う必要があります。その後、必要なすべてのアラームを再スケジュールできます。

マニフェストで次のようなもの:

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

<receiver
    android:name=".broadcasts.InitReceiver"
    android:exported="false" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.TIME_SET" />
        <action android:name="android.intent.action.TIMEZONE_CHANGED" />
    </intent-filter>
</receiver>

ユーザーがあるタイムゾーンから別のタイムゾーンに移動している場合でも、アラームを機能させたいと思うかもしれませんTIME_SETTIMEZONE_CHANGED

そして、放送用にこんなもの。

public class YourBroadcastReceiverName extends BroadcastReceiver {

    private AlarmManagerFacade alarmManager;

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

        // Retreive data related to alarms
        Cursor cursor = context.getContentResolver().query(Alarm.CONTENT_URI, null,
                Alarm.COLUMN_ACTIVE + " = ? ",
                new String[] { String.valueOf(1) }, "");

        if (cursor.moveToFirst()) {

            // Schedule all the active alarms.
            alarmManager = new AlarmManagerFacade(context);
            do {
                // TODO : Schedule alarm according to data in cursor.
            } while (cursor.moveToNext());
        }
        cursor.close();
    }
}

(このコードは私のアプリの 1 つからのものです。一部のオブジェクトは Android SDK で使用できない場合があります。)

すべてのアラームを再スケジュールできるようにするには、アラームをどこかに保存する必要があります。

たとえば、独自のContentProviderを作成できます。

  • CursorAdapterウィジェットのおかげで、他の Android コンポーネントとうまく連携します。
  • これは最も簡単な解決策ではありませんが、Android のガイドラインに従いたい場合に最適な方法です。

SharedPreferencesを使用するなど、アラームを保存するための他のより簡単な代替手段があるかもしれません。

  • 使い方は簡単です。
  • ただし、複数のアラームを使いやすい方法で保存するには、ハックする必要があります。

最後の代替手段は、情報を含むオブジェクトを作成し、それをシリアル化し、SD カードにファイルとして保存することです。

  • それは醜く、柔軟性がありません。
  • しかし、実装するのはそれほど難しくありません...

さまざまなストレージ オプションを詳しく調べたい場合は、こちらのドキュメントで読むことができます: http://developer.android.com/guide/topics/data/data-storage.html

これがすべてあなたのお役に立てば幸いです。:)

于 2012-11-08T09:15:58.167 に答える
0

マニフェスト ファイルを編集し、

<receiver android:name=".RecieverName" 
             android:enabled="true" 
             android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

デバイスの再起動時に自動的に開始されます。

また、その許可を宣言し、

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
于 2012-11-08T09:16:28.700 に答える