2014-01-08 3 views
1

я ве застрял со временем на некоторое время, так что я решил использовать AlarmManager, но я м перед проблемой, На самом деле я хотел быКак проверить AlarmManager для повторения всего 5 раз

  1. Wi-Fi сканирования и вставлять в SQlite каждые 3 секунды в 5 раз, когда заканчивается на пятом, фактически выбирайте avg (из Wi-Fi-сигнала) из sqlite).

  2. После отображения значения avg система продолжит выполнение сканирования в 1. снова, система остановится, пока пользователь не нажмет кнопку остановки.

    Но дело в том, что я не знаю, как использовать AlarmManager таким образом.

Пожалуйста, кто-нибудь рекомендует меня. Спасибо.

(извините за неорганизованный код) Вот мой грубый код:

long repeatTime = 1000*3; 
String fullinfo; 
final public static String ONE_TIME = "onetime"; 
AlarmManager am ; 
PendingIntent pi; 
public void onReceive(Context context, Intent intent) { 
    PowerManager pm = (PowerManager) context 
      .getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(
      PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG"); 
    wl.acquire(); 


    WifiManager wifiMan = (WifiManager) context 
      .getSystemService(Context.WIFI_SERVICE); 
    wifiMan.startScan(); 
    List<ScanResult> resultList = wifiMan.getScanResults(); 
    int foundCount = resultList.size(); 
    Toast.makeText(context, "Scan done, " + foundCount + " found", 
      Toast.LENGTH_SHORT).show(); 
    ListIterator<ScanResult> results = resultList.listIterator(); 
    fullinfo = "Scan Results : \n"; 
    String[][] wifi_info = new String[foundCount - 1][3]; 
    for (int i = 0; i <= foundCount - 1; i++) { 
     while (results.hasNext()) { 
      ScanResult info = results.next(); 

      wifi_info[i][0] = "\nName: " + info.SSID + "\n"; 
      wifi_info[i][1] = ";Mac: " + info.BSSID + "\n"; 
      wifi_info[i][2] = ";Signal: " + info.level + "\n"; 

      fullinfo = fullinfo + wifi_info[0][0] + wifi_info[0][1] 
        + wifi_info[0][2]; 

     }// end while 
    }// end for 


    Bundle extras = intent.getExtras(); 
    StringBuilder msgStr = new StringBuilder(); 

    if (extras != null && extras.getBoolean(ONE_TIME, Boolean.FALSE)) { 
     msgStr.append("One time Timer : "); 
    } 
    Format formatter = new SimpleDateFormat("hh:mm:ss a"); 
    msgStr.append(formatter.format(new Date())); 

    //insertIntoDatabase(); 
    Toast.makeText(context, "" + fullinfo + "\n" + msgStr + "_"+currentTime, 
      Toast.LENGTH_SHORT).show(); 
    wl.release(); 

} 

public void SetAlarm(Context context) { 
     am = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context,AlarmManagerBroadcastReceiver.class); 
     intent.putExtra(ONE_TIME, Boolean.FALSE); 
     pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
       repeatTime, pi); 
} 

ответ

3

Я думаю, что вместо того, чтобы использовать менеджер будильника можно использовать countDownTimer следующим

new CountDownTimer(15000, 3000) { 

      @Override 
      public void onTick(long arg0) { 
       // Your code here 

      } 

      @Override 
      public void onFinish() { 
       // your code here 

      } 
     }.start(); 

Этот отсчет таймера будет работать в течение 15 секунд (5 * 3сек) с интервалом в 3 секунды. Вы можете использовать onTick(), чтобы написать свой код для запуска через каждые 3 секунды и onFinish(), чтобы написать код для завершения таймера через 5 интервалов.

0

Поддерживать счетчик говорить в общем предпочтении. каждый раз, когда вы выполняете какие-либо операции, получайте счетчик каждый раз в диспетчере аварийных сигналов, а если он соответствует 5 требованиям, не выполняйте операции. То есть у вас будет оператор if else.

учебники для использования менеджера сигнализации:

Use Android's AlarmManager to schedule an event

Android AlarmManager tutorial

Android Alarm Manager

Надежда, что помогает.

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

  • Нет связанных вопросов^_^