2

メインアクティビティでは、ブロードキャストレシーバー、保留中のインテント、およびアラームマネージャーがあります。選択した時間(System.currentTimeMillis()+ smstimeinmilliseconds)に従ってトリガーされます。

Intent intent = new Intent(this, DBBroadcastReceiver.class);
intent.putExtra("message", message);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + smstimeinmilliseconds, pendingIntent);

選択した時間に、この保留中のインテントがブロードキャストレシーバーをトリガーします。

public class DBBroadcastReceiver extends BroadcastReceiver 

@Override
public void onReceive(Context context, Intent intent)
{
message = intent.getStringExtra("message");

}

アクティビティでメッセージを設定し、アラームマネージャで時間を設定できます。すべてが完璧に機能します。これをアクティブ化および非アクティブ化できます。しかし、将来的にいくつかのアラームマネージャーを設定して、モバイルを再起動した場合。すべてのアラームマネージャが破棄します....。

アクティビティ、放送受信機、サービスが必要な場合は、手順と順序で教えてください。サービスが必要な場合は、どのように使用できますか。

4

1 に答える 1

1

起動時に BoradcastReceiver を呼び出す必要があります。

次に、マニフェストに次のものが必要です。

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

<receiver
    android:name=".broadcasts.YourBroadcastReceiverName">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

そして、このブロードキャスト レシーバーは、すべてのアラームを再度スケジュールする必要があります。何かのようなもの :

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-10-28T11:12:57.317 に答える