[英]How to add TimePicker time to BroadCast Receiver pending intent?
我有一個正在開發的提醒應用程序,除通知用戶的時間外,其他所有功能均與預期的一樣。 我使用時間選擇器選擇時間,但是不知道如何將用戶設置的時間添加到待處理的意圖中。 我已經研究了android docs以及其他具有類似搜索條件的網站,但無濟於事。 有任何想法嗎?
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>
每次按下“設置時間”按鈕時,電話上方都會振動,而不是在設置“時間選擇器”時間時振動。 謝謝你的幫助!
您應該注意的第一件事是,AlarmManager具有兩種在設定的時間觸發警報的模式。
注意:從API 19開始,傳遞給此方法的觸發時間被視為不准確:警報不會在此時間之前發送,但可能會延遲並在以后發送。
傳入的時間是根據set()或setExact()方法的第一個參數定義的。 選擇了RTC_WAKEUP,需要定義以毫秒為單位的UTC時間的喚醒時間(由System.currentTimeMillis()方法給出)。
請參閱: http : //developer.android.com/reference/android/app/AlarmManager.html#RTC_WAKEUP
獲得此時間的最簡單方法是致電:
AlarmCal.getTimeInMillis()
請注意,如果給定的時間已過去,則警報將立即觸發。 這就是設置警報后立即觸發警報的原因。
文檔中的其他說明:
設備處於睡眠狀態時會保留已注冊的警報(如果警報在這段時間內關閉,可以選擇將其喚醒),但是如果已關閉並重新啟動,則警報將被清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.