2016-05-29 13 views
-1

私は今3日間立ち往生しています。私はどこでも答えを見つけることができないため、信じられないほど基本的または非常に複雑です。私はBroadcastReceiverとその放送を開始するためのインテントを送るボタンを持っています。別のデータを送信するボタン(int ++)をクリックするたびに、インテントは10mのタイマーを持つので、2つの問題があります。同じ放送の複数のインスタンスを同時に実行する方法

1 :データを送信するには、sendBroadcast(intent)を使用する必要がありますが、タイマーを設定するにはAlarmManagerを使用し、インテントとIntentにAlarmManagerを入れるだけで、最初に挿入されたデータが送信されます私はこれを解決する?

2:同じBroadcastReceiverのインスタンスを2つ以上持ち、アラームを同時にカウントしたいと思います。事例:ユーザーが1つのアラームを作成し、5m後に別のアラームを作成すると、1つのアラームが実行され、10秒後に2番目のアラームが実行され、最初のアラームが上書きされます。第1のものと第2のものを設定した後に第2のものを実行します。これをどのように達成するのですか?

マイbroadcastReceiver:

public class Broadcast_RemoveClass extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      int i = intent.getExtras().getInt("mInt"); 
      Toast.makeText(context, "done"+i, Toast.LENGTH_LONG).show(); 
     } 
    } 

onClickの内側の意図送信:それはただの質問のいずれかにいたとしても、

public void startAlert(int i) { 
    Intent intent = new Intent(getActivity(), Broadcast_RemoveClass.class); 
    Bundle bd = new Bundle(); 
    bd.putInt("mInt", i); 
    intent.putExtras(bd); 
    // getActivity().sendBroadcast(intent); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 * 60 * 10, pendingIntent); 
    Toast.makeText(getActivity(), "countdown started " ,Toast.LENGTH_SHORT).show(); 
} 

Guysは助けてくださいを

答えて

1

あなたをdo:

PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0, intent, 0); 

最初の0は、この保留中のインテントのIDとして機能します。この方法で、キャンセルしたり、将来更新することができます。同一のID(および適切なフラグ)を持つ保留中インテントをシステムに送信すると、それは前のインテントを置き換えます。したがって、別のIDを使用して新しい保留中のインテントを投稿してください。すべての場合にハードコーディングされた0を使用します。

この動作もendで設定されたフラグによって制御されます。この値を0に設定しました。これは意味がありません... public static 0の値を持つPendingIntentクラスのfinalフィールド。フラグにハードコードされた値を使用しないでください。有効な値を持っていても、コードは非常に混乱します。あなたが何をしたいかに応じて、最後の0を適切なフラグに置き換えます。 PendingIntentクラスで利用可能なフラグは、これらは以下のとおりです。

int FLAG_CANCEL_CURRENT 
Flag indicating that if the described PendingIntent already exists, the current one should be canceled before generating a new one. 
int FLAG_IMMUTABLE 
Flag indicating that the created PendingIntent should be immutable. 
int FLAG_NO_CREATE 
Flag indicating that if the described PendingIntent does not already exist, then simply return null instead of creating it. 
int FLAG_ONE_SHOT 
Flag indicating that this PendingIntent can be used only once. 
int FLAG_UPDATE_CURRENT 
Flag indicating that if the described PendingIntent already exists, then keep it but replace its extra data with what is in this new Intent. 

あなたは放送受信機の2番目のインスタンスを必要としません。同じ放送受信機があなたが望むすべてのインテントを扱うことができます。

+0

ありがとう、これは私が探していたものです! –

+0

あなたは歓迎です...答えがあなたの質問を満たしたら、それを受け入れたものとしてマークします。チェックボックスをクリックしてください... upvoteしないでください。 – Anonymous

+0

はい私は練習を意識していますが、他の質問に未回答のまま残っているため、受け入れられたとマークしないことにしました –

関連する問題