Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序未在指定时间静音_Java_Android_Alarmmanager - Fatal编程技术网

Java 应用程序未在指定时间静音

Java 应用程序未在指定时间静音,java,android,alarmmanager,Java,Android,Alarmmanager,更新:终于开始测试了。没用。更改了一些代码,明天再试。 在MainActivity中,我让程序从JSON数据中检索时间数据,并将它们存储到变量中。然后,我调用该方法,将6个不同的计时分为小时和分钟,将它们相乘,以毫秒为单位,然后在AlarmManager.RTC_WAKEUP中使用它们。以下是主要活动代码: mPrayerTime = (Button) findViewById(R.id.muteButton); mPrayerTime.setOnClickListener(new

更新:终于开始测试了。没用。更改了一些代码,明天再试。

在MainActivity中,我让程序从JSON数据中检索时间数据,并将它们存储到变量中。然后,我调用该方法,将6个不同的计时分为小时和分钟,将它们相乘,以毫秒为单位,然后在
AlarmManager.RTC_WAKEUP
中使用它们。以下是主要活动代码:

   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:代码根本不会使手机静音,即使它在特定时间应该静音。

我想提醒您两件事:

1、 我建议您使用
SimpleDataFormat
获取小时、分钟、秒等,例如:

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

2、 我没有看到您的代码,但是,我知道AlarmManager没有按时执行,它将在您的设置或之前执行,这是为了节省电源,并且自API 19以来。

更改以下行

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


请停止将此标记为Android studio。这与您正在使用的IDE无关。我所看到的每一个地方都说使用AlarmManager从google doc执行soNote,从API 19(KITKAT)开始,警报传递是不精确的:操作系统将切换警报以最小化唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)。targetSdkVersion早于API 19的应用程序将继续看到以前的行为,其中所有警报都会在请求时准确传递。可以!如果我可以问的话,
set
setExact
之间有什么区别?请通过foll-link,long,android.app.pendingent)
alarmManager.setExact(AlarmManager.RTC_WAKEUP, Long.parseLong(String.valueOf(totalFTime)), pendingIntent);