0

定義済みの時間に 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);
    }

  }
 }
}
4

1 に答える 1