2017-07-17 32 views
0

更新:終於到了測試。沒有工作。更改了一些代碼,明天再試。應用程序不在指定時間靜音

在我的MainActivity中,我讓程序從JSON數據中檢索時間數據並將它們存儲到變量中。然後我調用這個方法,將6種不同的時間分別分成幾個小時和幾分鐘,然後將它們相乘,這樣就可以毫秒爲單位,然後在AlarmManager.RTC_WAKEUP中使用它們。下面是在MainActivity代碼:

mPrayerTime = (Button) findViewById(R.id.muteButton); 
    mPrayerTime.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      new fajrModel(); 
      new shurooqModel(); 
      new dhuhrModel(); 
      new asrModel(); 
      new maghribModel(); 
      new ishaModel(); 


      AlarmManager falarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      AlarmManager salarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      AlarmManager dalarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      AlarmManager aalarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      AlarmManager malarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      AlarmManager ialarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

      Intent intent = new Intent(MainActivity.this, AlarmReciever.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 




      //setting up calender for times. 
      Calendar fcal = Calendar.getInstance(); 
      SimpleDateFormat fTime = new SimpleDateFormat("h:mm a", Locale.ENGLISH); 
      try { 
       fcal.setTime(fTime.parse(fajr)); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 


      Calendar dcal = Calendar.getInstance(); 
      SimpleDateFormat dTime = new SimpleDateFormat("h:mm a", Locale.ENGLISH); 
      try { 
       dcal.setTime(dTime.parse(dhuhr)); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 


      Calendar scal = Calendar.getInstance(); 
      SimpleDateFormat sTime = new SimpleDateFormat("h:mm a", Locale.ENGLISH); 
      try { 
       scal.setTime(sTime.parse(shurooq)); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 


      Calendar acal = Calendar.getInstance(); 
      SimpleDateFormat aTime = new SimpleDateFormat("h:mm a", Locale.ENGLISH); 
      try { 
       acal.setTime(aTime.parse(asr)); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 


      Calendar mcal = Calendar.getInstance(); 
      SimpleDateFormat mTime = new SimpleDateFormat("h:mm a", Locale.ENGLISH); 
      try { 
       mcal.setTime(mTime.parse(maghrib)); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 


      Calendar ical = Calendar.getInstance(); 
      SimpleDateFormat iTime = new SimpleDateFormat("h:mm a", Locale.ENGLISH); 
      try { 
       ical.setTime(iTime.parse(isha)); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 

      Log.d("fajr", String.valueOf(ical)); 


      /*FAJR 

      */ 
      falarmManager.setExact(AlarmManager.RTC_WAKEUP, fcal.getTimeInMillis(), pendingIntent); 

      //SHUROOQ 

      salarmManager.setExact(AlarmManager.RTC_WAKEUP, scal.getTimeInMillis(), pendingIntent); 

      //Dhuhr 

      dalarmManager.setExact(AlarmManager.RTC_WAKEUP, dcal.getTimeInMillis(), pendingIntent); 

      //ASR 

      aalarmManager.setExact(AlarmManager.RTC_WAKEUP, acal.getTimeInMillis(), pendingIntent); 

      //MAGHRIB 

      malarmManager.setExact(AlarmManager.RTC_WAKEUP, mcal.getTimeInMillis(), pendingIntent); 

      //ISHA 
      ialarmManager.setExact(AlarmManager.RTC_WAKEUP, ical.getTimeInMillis(), pendingIntent); 


     } 


    }); 
} 

AlarmReceiver.java:

public class AlarmReciever extends WakefulBroadcastReceiver { 
@Override 
public void onReceive(final Context context, Intent intent) { 
    Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show(); 
    AudioManager silent = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
    silent.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
} 

}

它確實沒有這樣的事情。它在那些時候將手機靜音,並且爲了測試它,我必須構建APK並將其放在手機上,並等待指定的時間,並且不發生任何事情。我在哪裏出了問題

TLDR:即使應該在特定的時間,代碼也不會使手機靜音。

+0

請停止這種標記由於Android工作室。這與您正在使用的IDE無關。 – Henry

回答

0

有兩件事我要提醒你:

1,我建議你使用SimpleDateFormat獲取小時,分鐘,秒等,如:

String minute=new SimpleDateFormat("mm").format(date); 

2,我沒有看到你的代碼,但是,我知道AlarmManager未及時執行,它會在你的設置或之前執行,這是爲了節省電力,並且自API 19

+0

無處不在我看到它說要使用AlarmManager來實現這一點 – Fencer300

+1

來自谷歌文檔的注意事項從API 19(KITKAT)開始,報警傳送是不準確的:操作系統會切換報警以最大限度地減少喚醒和電池使用。有新的API支持需要嚴格交付保證的應用程序;請參閱setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。 targetSdkVersion早於API 19的應用程序將繼續看到之前的行爲,即所有報警在請求時都準確傳送。 –

0

更改以下行

alarmManager.set(AlarmManager.RTC_WAKEUP, Long.parseLong(String.valueOf(totalFTime)), pendingIntent); 

alarmManager.setExact(AlarmManager.RTC_WAKEUP, Long.parseLong(String.valueOf(totalFTime)), pendingIntent); 
+0

會做!如果我可能會問,'set'和'setExact'有什麼區別? – Fencer300

+0

請通過foll鏈接https://developer.android.com/reference/android/app/AlarmManager.html#setExact(int,long,android.app.PendingIntent) –

相關問題