我有一个我正在开发的提醒应用程序,除了通知用户的时间外,一切都像它应该的那样工作。我使用时间选择器来选择时间,但不知道如何将用户设置的时间添加到待处理的意图中。我已经研究过android文档以及其他类似搜索的网站,但无济于事。有什么想法吗?
MainActivity.java
public class MainActivity extends Activity{
int mHour;
int mMinute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void setAlarm(View view) {
TimePicker picker = (TimePicker)findViewById(R.id.timePicker1);
EditText text = (EditText)findViewById(R.id.editText1);
Toast toast = Toast (text, picker);
toast.show();
Intent intent = new Intent(this, AlarmBoadcastReceiver.class);
PendingIntent pendingintent = PendingIntent.getBroadcast(this.getApplicationContext(), 1234, intent, 0);
Calendar AlarmCal = Calendar.getInstance();
AlarmCal.setTimeInMillis(System.currentTimeMillis());
AlarmCal.set(Calendar.HOUR_OF_DAY, mHour);
AlarmCal.set(Calendar.MINUTE, mMinute);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, /*No Idea what to put here*/, pendingintent);
OnTimeSetListener mTimeSetListener = new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
mHour = hourOfDay;
mMinute = minute;
}
};
}
private Toast Toast(EditText text, TimePicker picker) {
return Toast.makeText(this, "Reminder set for " + picker.getCurrentHour().toString() + ":"
+ picker.getCurrentMinute() + " with message " + "'" + text.getText().toString() + "'",
Toast.LENGTH_LONG);
}
public void exitApp(View view) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
AlarmBoadcastReceiver.java
public class AlarmBoadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(2000);
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.reminder"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.VIBRATE" >
</uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.reminder.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="AlarmBoadcastReceiver" >
</receiver>
</application>
</manifest>
每次按下设置时间按钮时,手机上方张贴的内容都会振动,而不是在设置时间选择器时间时振动。谢谢你的帮助!
答案 0 :(得分:0)
首先要注意的是,AlarmManager有两种模式可以在设定的时间触发警报。
注意:从API 19开始,传递给此方法的触发时间是 被视为不精确:在此时间之前不会发出警报, 但可能会推迟并在一段时间后交付。
http://developer.android.com/reference/android/app/AlarmManager.html#set(int,long,android.app.PendingIntent)
传入的时间是根据set()或setExact()方法的第一个参数定义的。您选择了RTC_WAKEUP,您需要以毫秒UTC时间定义唤醒时间(由System.currentTimeMillis()方法给出)。
请参阅:http://developer.android.com/reference/android/app/AlarmManager.html#RTC_WAKEUP
获得这段时间的最简单方法是致电:
AlarmCal.getTimeInMillis()
只是一个小小的音符,如果给定的时间是过去,那么闹钟会立即触发。这就是您在设置闹钟时触发警报的原因。
文档中的其他说明:
设备处于睡眠状态时保留已注册的警报(并且可以 如果它们在那段时间内关闭,可以选择将设备唤醒),但是 如果关闭并重新启动,将被清除。