13

アラームを使用して、特定の時間にコードを実行したいと考えています。マニフェストに登録されたブロードキャストレシーバーでアラームを正常に実装しましたが、私が理解しているように、このメソッドはブロードキャストレシーバーに別のクラスを使用します。

このメソッドを使用して別のアクティビティを開始できますが、それを使用してメイン アクティビティでメソッドを実行することはできませんか?

(ブロードキャスト レシーバーから実行中のアクティビティを通知するにはどうすればよいですか? )

そのため、上記の回答で説明したように、ブロードキャストレシーバーをメインアクティビティに登録しようとしています。

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}

ただし、これをアラーム マネージャーで動作させることができませんでした。アラーム インテントをブロードキャスト レシーバーにリンクする方法がわかりません。アラーム マネージャ ブロードキャスト レシーバをアクティビティに動的に登録する例を教えてください。または、これを行う方法を説明してください。

4

2 に答える 2

19

これはどう?

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

そして、あなたのManifest.xmlファイルで:

<receiver android:name="com.package.YourOnReceiver">
   <intent-filter>
       <action android:name="WhatEverYouWant" />
   </intent-filter>
</receiver>

私の知る限り、マニフェストで受信者を宣言する必要があります。アクティビティ内のプライベート インスタンスに設定できるかどうかはわかりません。アクティビティ内で onReceive を宣言し、それを呼び出すことができます (BroadcastReceiver にインターフェイスがある場合。それがあるかどうかはわかりません)。

于 2011-08-15T04:36:55.407 に答える
1

アラームを開始する場所からアラーム インテントを開始します。アラームを聞き始めたい場所から以下のコードを記述します

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

そしてブロードキャストレシーバーで、受信したいコードを書きます。そして、メニフェストで以下に書いてください

<receiver android:name=".AlarmReceiver" android:process=":remote"/>

また、繰り返しアラームを入れることもできます。それが役立つことを願っています!

于 2012-08-16T04:30:08.267 に答える