我遇到了问题:
我有一个应用程序可以在特定时间显示通知,可以使用TimePickerDialog选择和更改通知。然后将时间保存到SharedPreferences,并且应该从保存的时间启动通知。但是,通知未启动。我在AndroidManifest.xml
中声明了适当的权限。这是我的代码:
SettingsActivity:
public class SettingsActivity extends AppCompatActivity {
SharedPreferences hour, minute, second, isTimeChosen;
SharedPreferences.Editor hour_editor, minute_editor, second_editor, itc_editor;
Button chooseTimeBtn;
private int mYear, mMonth, mDay, mHour, mMinute;
TextView timeTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
hour = getSharedPreferences("hour", 8);
minute = getSharedPreferences("minute", 0);
second = getSharedPreferences("second", 0);
timeTxt = (TextView) findViewById(R.id.timeTxt);
timeTxt.setText((String.valueOf(hour.getInt("hour", 0)) + ":" + (String.valueOf(minute.getInt("minute", 0)))));
isTimeChosen = getSharedPreferences("isTimeChosen", 0);
hour_editor = hour.edit();
minute_editor = minute.edit();
second_editor = second.edit();
itc_editor = isTimeChosen.edit();
final Calendar c = Calendar.getInstance();
if (isTimeChosen.getString("isTimeChosen", "false").equals("false")) {
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
} else {
mHour = hour.getInt("hour", 8);
mMinute = minute.getInt("minute", 0);
}
chooseTimeBtn = (Button) findViewById(R.id.chooseTimeBtn);
chooseTimeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimePickerDialog tpd = new TimePickerDialog(SettingsActivity.this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
hour_editor.putInt("hour", hourOfDay);
minute_editor.putInt("minute", minute);
hour_editor.commit();
minute_editor.commit();
itc_editor.putString("isTimeChosen", "true");
itc_editor.commit();
timeTxt.setText(hourOfDay + ":" + minute);
}
}, mHour, mMinute, true);
tpd.show();
}
});
}
}
我的MainActivity:
public class MainActivity extends AppCompatActivity {
SharedPreferences hour, minute, second;
int sp_hour, sp_min;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hour = getSharedPreferences("hour", 8);
minute = getSharedPreferences("minute", 0);
second = getSharedPreferences("second", 0);
sp_hour = hour.getInt("hour", 8);
sp_min = minute.getInt("minute", 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, sp_hour);
calendar.set(Calendar.MINUTE, sp_min);
calendar.set(Calendar.SECOND, 0);
if (calendar.getTime().compareTo(new Date()) < 0) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
Intent intent1 = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent settings = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(settings);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}