繁体   English   中英

设备关闭时的处理程序和可运行状态(Android)

[英]Handler and runnable while device has been turned off (Android)

我用runnable等创建了一个处理程序,以延迟一些通知,非常简单。 第一个通知的延迟时间为1小时,第二个为2小时,以此类推。但是,当第一个通知已经触发时,用户关闭设备时,第二个通知将不再被触发...我真的需要第二个通知和以下要触发的通知,尽管用户在这两次之间已经关闭了设备。

这个怎么做? 我的通知代码,是否需要添加一些内容?:

  final Switch mySwitch = (Switch) findViewById(R.id.theswitch);
        mySwitch.setChecked(myPrefs.getBoolean("switch", false));





        //attach a listener to check for changes in state
        mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         final boolean isChecked) {


                editor.putBoolean("switch", isChecked);
                editor.commit();

                if (isChecked) {
                    //switch has been switched ON

                    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+1:00"));
                    Date currentLocalTime = cal.getTime();
                    DateFormat date = new SimpleDateFormat("HH:mm");
// you can get seconds by adding  "...:ss" to it
                    date.setTimeZone(TimeZone.getTimeZone("GMT+1:00"));
                    String localTime = date.format(currentLocalTime);

                    Log.w(localTime, "1");


                    if (localTime.equals("08:50") || localTime.equals("08:51") || localTime.equals("08:52") || localTime.equals("08:53") || localTime.equals("08:54") || localTime.equals("08:55") || localTime.equals("08:56")
                            || localTime.equals("08:57") || localTime.equals("08:58") || localTime.equals("08:59") || localTime.equals("09:00") || localTime.equals("09:01") || localTime.equals("09:02") || localTime.equals("09:03")
                            || localTime.equals("09:04") || localTime.equals("09:05") || localTime.equals("09:06") || localTime.equals("09:07") || localTime.equals("09:08") || localTime.equals("09:09") || localTime.equals("09:10")
                            || localTime.equals("09:11") || localTime.equals("09:12") || localTime.equals("09:13") || localTime.equals("09:14") || localTime.equals("09:15") || localTime.equals("09:16") || localTime.equals("09:17")
                            || localTime.equals("09:18") || localTime.equals("09:19") || localTime.equals("09:20") || localTime.equals("09:21") || localTime.equals("09:22") || localTime.equals("09:23") || localTime.equals("09:24")
                            || localTime.equals("09:25") || localTime.equals("09:26") || localTime.equals("09:27") || localTime.equals("09:28") || localTime.equals("09:29") || localTime.equals("09:30") || localTime.equals("09:31")
                            || localTime.equals("09:32") || localTime.equals("09:33") || localTime.equals("09:34") || localTime.equals("09:35") || localTime.equals("09:36") || localTime.equals("09:37") || localTime.equals("09:38")
                            || localTime.equals("09:39") || localTime.equals("09:40") || localTime.equals("09:41") || localTime.equals("09:42") || localTime.equals("09:43") || localTime.equals("09:44") || localTime.equals("09:45")
                            || localTime.equals("09:46") || localTime.equals("09:47") || localTime.equals("09:48") || localTime.equals("09:49") || localTime.equals("09:50") || localTime.equals("09:51") || localTime.equals("09:52")
                            || localTime.equals("09:53") || localTime.equals("09:54") || localTime.equals("09:55") || localTime.equals("09:56") || localTime.equals("09:57") || localTime.equals("09:58") || localTime.equals("09:59")
                            || localTime.equals("10:00") || localTime.equals("10:01") || localTime.equals("10:02") || localTime.equals("10:03") || localTime.equals("10:04") || localTime.equals("10:05") || localTime.equals("10:06")
                            || localTime.equals("10:07") || localTime.equals("10:08") || localTime.equals("10:09") || localTime.equals("10:10") || localTime.equals("15:07")) {

                        Log.w("It is between", "those times");


                        boolean beenfired2 = myPrefs.getBoolean("beenfired", false);


                        if (beenfired2 != true) {

                            Log.w("yes", "it is not equal to true");
                            // day 1

                            mHandler.postDelayed(mClickRunnable, 3600000);
                            mHandler.postDelayed(mClickRunnable, 7200000);
                            mHandler.postDelayed(mClickRunnable, 7200000);
                            mHandler.postDelayed(mClickRunnable, 14400000);
                            mHandler.postDelayed(mClickRunnable, 18000000);
                            mHandler.postDelayed(mClickRunnable, 21600000);
                            mHandler.postDelayed(mClickRunnable, 25200000);
                            mHandler.postDelayed(mClickRunnable, 28800000);
                            mHandler.postDelayed(mClickRunnable, 32400000);
                            mHandler.postDelayed(mClickRunnable, 36000000);
                            mHandler.postDelayed(mClickRunnable, 39600000);

                            // day 2
                            mHandler.postDelayed(mClickRunnable, 90000000);
                            mHandler.postDelayed(mClickRunnable, 97200000);
                            mHandler.postDelayed(mClickRunnable, 104400000);
                            mHandler.postDelayed(mClickRunnable, 111600000);
                            mHandler.postDelayed(mClickRunnable, 118800000);
                            mHandler.postDelayed(mClickRunnable, 126000000);


                            // day 3
                            mHandler.postDelayed(mClickRunnable, 180000000);
                            mHandler.postDelayed(mClickRunnable, 190800000);
                            mHandler.postDelayed(mClickRunnable, 201600000);
                            mHandler.postDelayed(mClickRunnable, 212400000);
                            mHandler.postDelayed(mClickRunnable, 212400000);

                            // day 4
                            mHandler.postDelayed(mClickRunnable, 270000000);
                            mHandler.postDelayed(mClickRunnable, 284400000);
                            mHandler.postDelayed(mClickRunnable, 298800000);

                            // day 5
                            mHandler.postDelayed(mClickRunnable, 367200000);
                            mHandler.postDelayed(mClickRunnable, 388800000);

                            // day 6
                            mHandler.postDelayed(mClickRunnable, 460800000);
                            mHandler.postDelayed(mClickRunnable, 475200000);

                            // day 7
                            mHandler.postDelayed(mClickRunnable, 554400000);


                            // day 8
                            mHandler.postDelayed(mClickRunnable, 648000000);



                            beenfired = true;
                            editor.putBoolean("beenfired", beenfired);
                            editor.commit();


                        } else {

                            Log.w("else", "else");


                        }

                    } else {

                        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Inlopen.this);

                        // set title
                        alertDialogBuilder.setTitle("Alarm kan niet worden ingeschakeld");

                        // set dialog message
                        alertDialogBuilder
                                .setMessage("U kunt het alarm alleen inschakelen tussen 9:00 en 10:00 's ochtends.")
                                .setCancelable(false)

                                .setNegativeButton("Oke", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        // if this button is clicked, just close
                                        // the dialog box and do nothing


                                        mySwitch.setChecked(false);
                                        editor.putBoolean("switch", false);
                                        editor.commit();
                                        dialog.cancel();
                                    }
                                });

                        // create alert dialog
                        AlertDialog alertDialog = alertDialogBuilder.create();

                        // show it
                        alertDialog.show();
                    }


                } else {
                    //switch has been switched OFF
                    beenfired = false;

                    mHandler.removeCallbacks(mClickRunnable);
                    mHandler.removeMessages(0);

                    editor.putBoolean("beenfired", beenfired);
                    editor.commit();

                    editor.putBoolean("switch", false);
                    editor.commit();


                }

            }
        });


    }


    private Handler mHandler = new Handler();
    private Runnable mClickRunnable = new Runnable() {
        @Override
        public void run() {
            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(Inlopen.this)
                            .setSmallIcon(R.drawable.iconsmall)
                            .setContentTitle("DM Voet App")
                            .setContentText("Uw moet uw voeten controleren!");
            mBuilder.setAutoCancel(true);
            Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            mBuilder.setSound(alarmSound);
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(1, mBuilder.build());
        }
    };

使用警报管理器

从文档中:“ Alarm Manager适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM