setexactandallow whileidle () не работает должным образом - PullRequest
0 голосов
/ 30 апреля 2018

Я создаю приложение для будильника, которое отключается в указанное пользователем время. Так как режим Doze вышел, я слышал, что мне нужно использовать setExactAndAllowWhileIdle() на API 23 или выше (я нацеливаюсь на API 26). Но проблема в том, что всякий раз, когда я устанавливаю будильник, он гаснет (только тост-сообщение в данный момент) через 3 секунды, несмотря ни на что. Понятия не имею почему. Любой тип обратной связи будет принята с благодарностью.

Примечание: я уже зарегистрировался BroadcastReceiver на Manifest.xml

public class MainActivity extends AppCompatActivity {

static final String CP ="checkpi";
MediaPlayer mp;
Calendar c= Calendar.getInstance();
TimePickerDialog.OnTimeSetListener otsl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView textView = (TextView)findViewById(R.id.tv);


    Button testbtn = (Button)findViewById(R.id.test);
    testbtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            new TimePickerDialog(MainActivity.this,android.R.style.Theme_Holo_Light_Dialog,otsl,
                    c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),true).show();



            }

        });
    otsl = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            textView.setText(hourOfDay+":"+minute);
            //c.set(Calendar.HOUR_OF_DAY,hourOfDay);
            //c.set(Calendar.MINUTE,minute);
            setAlarm(c.getTimeInMillis());
        }
    };

    Button canceltestbtn = (Button)findViewById(R.id.canceltest);
    canceltestbtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            if(!textView.equals("")){
                textView.setText("");
            }
            cancelAlarm();

        }
    });

    }

public void setAlarm(long timeinmils) {
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    Intent i = new Intent(MainActivity.this,Alarm.class);
    PendingIntent pi =  PendingIntent.getBroadcast(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);
    am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,timeinmils,pi);

}
public void cancelAlarm() {
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    Intent i = new Intent(MainActivity.this,Alarm.class);
    PendingIntent pi =  PendingIntent.getBroadcast(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);

    am.cancel(pi);
    pi.cancel();

    if(pi==null){
        Log.v(CP,"Pendingintent==null");
        }
        else{
        Log.v(CP,"Pendingintent!=null");
    }

}






 }
// ---------------------------------------------
public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context,"Wake up!!",Toast.LENGTH_SHORT).show();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...