Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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 如何使用AlarmManager设置一些报警?_Java_Android_Alarmmanager - Fatal编程技术网

Java 如何使用AlarmManager设置一些报警?

Java 如何使用AlarmManager设置一些报警?,java,android,alarmmanager,Java,Android,Alarmmanager,我正在为Android制作闹钟应用程序。我想使用AlarmManager设置更多警报。我怎么做?据我所知,我需要使用具有不同请求代码的PendingEvent来设置一些警报。我试图增加一个静态变量,我做到了,但如果用户重新加载应用程序,该变量的请求代码为零。如何在重新加载应用程序后设置一些警报 我有一项活动 public class NewAlarmActivity extends AppCompatActivity { private Calendar calendar; private s

我正在为Android制作闹钟应用程序。我想使用AlarmManager设置更多警报。我怎么做?据我所知,我需要使用具有不同请求代码的PendingEvent来设置一些警报。我试图增加一个静态变量,我做到了,但如果用户重新加载应用程序,该变量的请求代码为零。如何在重新加载应用程序后设置一些警报

我有一项活动

public class NewAlarmActivity extends AppCompatActivity {
private Calendar calendar;

private static int REQUEST_CODE_ALARM = 0;

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

    showTimePickerDialog();

    FloatingActionButton floatingActionButton = findViewById(R.id.fb_save_alarm);
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            saveAlarm();
        }
    });
}

// set time for an alarm
private void showTimePickerDialog() {
    calendar = Calendar.getInstance();

    TimePickerDialog timePickerDialog = new TimePickerDialog(NewAlarmActivity.this, AlertDialog.THEME_DEVICE_DEFAULT_DARK, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
            calendar.set(Calendar.MINUTE, minute);
        }
    }, Calendar.HOUR_OF_DAY, Calendar.MINUTE, true);

    timePickerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            finish();
        }
    });

    timePickerDialog.show();
}

// get full time like a '05:45'
private String getFullTime(int hour, int minute) {
    String h = String.valueOf(hour);
    String m = String.valueOf(minute);

    if (hour < 10) h = "0" + hour;
    if (minute < 10) m = "0" + minute;

    return h + ":" + m;
}

private void saveAlarm() {
    setAlarm();
    insertIntoSQLite();
    finish();
}

private void setAlarm() {
    Intent intent = new Intent(NewAlarmActivity.this, AlarmReceiver.class);
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), ++REQUEST_CODE_ALARM, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    if (alarmManager != null) {
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    }
}

private void insertIntoSQLite() {
    DBHelper dbHelper = new DBHelper(NewAlarmActivity.this);
    SQLiteDatabase database = dbHelper.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put("time", getFullTime(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE)));
    contentValues.put("description", et_description.getText().toString());

    database.insert("alarm", null, contentValues);

    dbHelper.close();
    }
}
public类NewAlarmActivity扩展了AppCompatActivity{
私人日历;
专用静态int请求\代码\报警=0;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u new\u alarm);
showTimePickerDialog();
FloatingActionButton FloatingActionButton=findViewById(R.id.fb\u保存\u报警);
floatingActionButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
saveAlarm();
}
});
}
//设置闹钟的时间
私有void showTimePickerDialog(){
calendar=calendar.getInstance();
TimePickerDialog TimePickerDialog=new TimePickerDialog(NewAlarmActivity.this,AlertDialog.THEME\u DEVICE\u DEFAULT\u DARK,new TimePickerDialog.OnTimeSetListener(){
@凌驾
时间集上的公共void(时间选择器视图,整数小时日,整数分钟){
calendar.set(calendar.HOUR\u OF_DAY,hourOfDay);
calendar.set(calendar.MINUTE,MINUTE);
}
},Calendar.HOUR\u OF_DAY,Calendar.MINUTE,true);
timePickerDialog.setOnCancelListener(新的DialogInterface.OnCancelListener(){
@凌驾
public void onCancel(对话框接口对话框){
完成();
}
});
timePickerDialog.show();
}
//像“05:45”一样获得全职工作
私有字符串getFullTime(整数小时,整数分钟){
字符串h=String.valueOf(小时);
字符串m=字符串.valueOf(分钟);
如果(小时<10)h=“0”+小时;
如果(分钟<10)m=“0”+分钟;
返回h+“:”+m;
}
私有void saveAlarm(){
设置报警();
插入SQLite();
完成();
}
私有void setAlarm(){
意向意向=新意向(NewAlarmActivity.this、AlarmReceiver.class);
intent.addFlags(intent.FLAG\u包括\u停止的\u包);
PendingEvent PendingEvent=PendingEvent.getBroadcast(getApplicationContext(),++REQUEST\u CODE\u ALARM,intent,PendingEvent.FLAG\u UPDATE\u CURRENT);
AlarmManager AlarmManager=(AlarmManager)getSystemService(Context.ALARM\u服务);
如果(alarmManager!=null){
alarmManager.set(alarmManager.RTC_唤醒,calendar.getTimeInMillis(),PendingContent);
}
}
私有void insertIntoSQLite(){
DBHelper DBHelper=newdbhelper(NewAlarmActivity.this);
SQLiteDatabase=dbHelper.getWritableDatabase();
ContentValues ContentValues=新ContentValues();
contentValues.put(“time”、getFullTime(calendar.get(calendar.HOUR\u OF_DAY)、calendar.get(calendar.MINUTE));
contentValues.put(“description”,et_description.getText().toString());
插入(“报警”,null,contentValues);
dbHelper.close();
}
}

您可以将小数据保存到SharedReference。 要保存请求\u代码\u报警值,请执行以下操作

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putInt("Request_code", REQUEST_CODE_ALARM);
editor.apply()
取回它

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
int Request_code = prefs.getInt("REQUEST_CODE_ALARM", 0); //0 is the default value.

我不建议您为此使用SQL数据库,因为SharedReferences对于存储用户首选项非常有用,因为只有少数变量需要存储。另一方面,SQLite更适合在有大量项目的地方存储数据,例如需要搜索的音乐库中的歌曲标题。

报警管理器不会精确到api 19以上。
尝试使用Workmanager。

显示您的代码。您这样做的目的是为了。@Raza check Out您面临的问题是,每当启动应用程序时,您的请求代码总是初始化为0。为了在设置报警后获得上一个代码,递增的请求代码应存储在持久内存中。共享首选项或sqlite。再次在onCreate方法中获取请求代码