定義済みの時間に 2 つのコード ブロックを実行したいと考えています。そのために AlarmManager を使用しています。2 つの別個の AlarmManager と 2 つの別個の保留中のインテント。画面上のボタンを押すと、2 つのアラームがトリガーされるように設定しました (1 つ目は 5 秒後にトリガーされ、2 つ目は 19 秒後にトリガーされます)。私の問題は両方のアラームであり、その結果、対応する両方のコード ブロックが 5 秒後に同時にトリガーされます。両方の保留中のインテントの ID を変更しましたが、この問題に直面しています。
以下は、私の主な活動 Java クラス コードです。
public class PerseusAndroid extends Activity implements OnClickListener, OnItemClickListener {
PendingIntent pi,pi2;
AlarmManager amon,amoff;
BroadcastReceiver br,br2;
BluetoothSocket m_btSck;
public static final int idTab2FWD = Menu.FIRST + 1,
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.PreseusAndroid);
setup();
setup2();
}
private void setup()
{
br = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent i) {
if (m_btSck != null )
try {
m_btSck.getOutputStream().write('1');
Toast.makeText(getBaseContext(), "Led is ON.. : )", Toast.LENGTH_LONG).show();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
registerReceiver(br, new IntentFilter("net.pocketmagic.perseus") );
final int _id2 = (int) System.currentTimeMillis();
pi = PendingIntent.getBroadcast( this,_id2 , new Intent ("net.pocketmagic.perseus"),PendingIntent.FLAG_CANCEL_CURRENT );
amon = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
}
private void setup2()
{
br2 = new BroadcastReceiver() {
@Override
public void onReceive(Context c1, Intent i1) {
if (m_btSck != null )
try {
m_btSck.getOutputStream().write('0');
Toast.makeText(getBaseContext(), "Led is Off.. : )", Toast.LENGTH_LONG).show();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
registerReceiver(br2, new IntentFilter("net.pocketmagic.perseus") );
final int _id = (int) System.currentTimeMillis();
pi2 = PendingIntent.getBroadcast( this, _id, new Intent("net.pocketmagic.perseus"),PendingIntent.FLAG_ONE_SHOT );
amoff = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
}
@Override
public void onClick(View v) {
int cmdId = v.getId();
if (cmdId == idTab2FWD)
{
amon.set( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +5000, pi );
//amoff.set( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +19000, pi2);
}
}
}
}