自己写了一个闹钟实例,在Android 6.0手机上运行,按home键并锁屏后就无法正常工作。
百度了一下建议用JobScheduler去进行后台重复调用,不过实现的效果是,每次刷新以后都会打开闹钟app,不管在进行什么操作。
贴代码:    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            JobScheduler mJobScheduler = (JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE);
            JobInfo jobInfo = new JobInfo.Builder(1, new ComponentName(getPackageName(), JobSchedulerService.class.getName()))
                    .setPeriodic(1000*1)
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                    .build();
            mJobScheduler.schedule(jobInfo);
        }
public class JobSchedulerService extends JobService {
    private String TAG ="Service";
    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            Log.e(TAG,"start");
            Toast.makeText(JobSchedulerService.this, "MyJobService", Toast.LENGTH_SHORT).show();
            JobParameters param = (JobParameters) msg.obj;
            jobFinished(param, true);
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            return true;
        }
    });

解决方案 »

  1.   

    你应该先判断是否到时间了,如果到时间再去startActivity
      

  2.   

    具体操作不太明白,能具体说一下吗 我的时钟设定是这样的 btn_set.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    c.setTimeInMillis(System.currentTimeMillis());
                    int mHour = c.get(Calendar.HOUR_OF_DAY);
                    int mMinute = c.get(Calendar.MINUTE);
                    new TimePickerDialog(MainActivity.this,new TimePickerDialog.OnTimeSetListener(){
                        public void onTimeSet(TimePicker view,int hourofDay,int minute){
                            c.setTimeInMillis(System.currentTimeMillis());
                            c.set(Calendar.HOUR_OF_DAY,hourofDay);
                            c.set(Calendar.MINUTE,minute);
                            c.set(Calendar.SECOND,0);
                            c.set(Calendar.MILLISECOND,0);
                            Intent intent  = new Intent(MainActivity.this,AlarmReceiver.class);
                            PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this,0,intent,0);
                            AlarmManager am;
                            am = (AlarmManager)getSystemService(ALARM_SERVICE);
                            am.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),sender);
                            Log.e("HEHE",c.getTimeInMillis()+"");   //这里的时间是一个unix时间戳
                            // 提示闹钟设置完毕:
                            Toast.makeText(MainActivity.this, "闹钟设置完毕~"+ c.getTimeInMillis(),
                                    Toast.LENGTH_SHORT).show();
                        }
                    },mHour,mMinute,true).show();
                }
            });