2017-07-17 17 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) –

相关问题