0

Я хочу выполнить два блока кода в заданное время. Для этого я использую AlarmManager. Два охранных диспетчера сигнализации и два отдельных ожидающих намерения. Я установил 2 сигнала тревоги для запуска (1-й из них срабатывает через 5 секунд, второй после 19 секунд), когда я нажимаю кнопку на экране. Моя проблема - это оба сигнала тревоги, и в результате оба соответствующих блока кода одновременно запускаются одновременно через 5 секунд. Я изменил идентификаторы обоих ожидающих намерений, но я столкнулся с этой проблемой.Как решить несколько аварийных сигналов в одном классе

Ниже мой основной код деятельность 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); 
    } 

    } 
} 
} 

ответ

0

Вы регистрируетесь как намерения/приемники с тем же умыслом/фильтром. Это означает, что он вызовет и другой приемник. Просто сделайте Intent/IntentFilter конкретным для каждого действия, т. Е. Вместо "net.pocketmagic.perseus" использовать: "net.pocketmagic.perseus.ACTION_1" и "net.pocketmagic.perseus.ACTION_2".

+0

Поблагодарите Pescis ... он решил проблему .... –

Смежные вопросы