大家好,请有人帮助我,我想通过我的应用程序将事件设置到设备日历。我需要从编辑文本(这是用户输入)中获取日期,然后点击一个按钮(比如设置日期)它应该作为事件保存到设备日历。并在所述日期提醒应用程序用户有关该事件。
我已经尝试了很多,但我做不到。作为一名大学生,我尽力了,但真的需要别人的帮助..
如果有人知道,请告诉我解决方案(如果提供了示例,那将是一个很大的帮助(请不要只告诉我有关 api、使用日历提供程序的信息,我需要适当的示例))。 .
提前致谢
我已经通过以下代码打开了设备日历。这允许我手动设置事件,但我想在单击按钮后自动设置事件。 有人可以在这方面帮助我吗? Intent i = new Intent();
//Froyo 或更高版本(请注意,我刚刚在 CM7 上测试过这个,比 froyo 的效果还差,所以这取决于手机......) cn = new ComponentName("com.google.android.calendar", "com.android.calendar.LaunchActivity");
//小于Froyo cn = new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity");
i.setComponent(cn); 启动 Activity (i);
上面的代码显示了原生日历并允许用户自己设置事件。 但我不希望这种情况发生,相反,我希望 native 日历接受用户输入并设置事件。为此,我实现了以下代码: public void addCalendarEvent(){
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", cal.getTimeInMillis());
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY");
intent.putExtra("UNTIL=20140404T080000Z",true);
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", "A Test Event from android app");
intent.putExtra("description", "A Test Description from android app");
intent.putExtra("eventLocation", "Geolocation");
startActivity(intent);
}
我在按钮的 onClick() 方法中调用了这个方法。 我将日期硬编码为:intent.putExtra("UNTIL=20140404T080000Z",true); 但这行不通。但是,我不想对其进行硬编码,它应该接受用户输入(动态地它应该工作,比如获取编辑文本数据并通过 Intent 传递)。 请问有人可以在这方面帮助我吗??
最佳答案
在单独使用这个答案之前,你必须先在谷歌上搜索一下。这是您以完美的方式学习新事物的唯一途径。
1) 报警管理器
2) 广播接收器
3)应用的 Intent 和上下文
好了,我们开始吧;
首先,您需要获取 Calendar 对象以将日期和时间设置到 Android Alarm Manager 中。 MainActivity.java中的这个方法,在你的按钮点击事件中调用这个方法,同时传递相关参数。
public void addReminder(int mYear, int mMonth, int mDay, int mHour, int mMinute){
Calendar c = Calendar.getInstance();
//set Reminder time and date into calendar object
c.set(Calendar.YEAR,mYear);
c.set(Calendar.MONTH, mMonth);//Don't use exact numeric value of the month, use one minus.Ex: April=>as 3
c.set(Calendar.DATE, mDay);
c.set(Calendar.HOUR_OF_DAY, mHour);
c.set(Calendar.MINUTE, mMinute);
c.set(Calendar.SECOND, 0);
//Unique Alarm ID creation
int alrmId=0;
alrmId=Integer.parseInt(mMonth+""+mDay+""+mHour+""+mMinute);
//Alarm task creation
Intent in=new Intent(this,ReminderReceiver.class);
in.putExtra("text", "You have a Reminder!");
in.putExtra("AlrmId", alrmId);
PendingIntent pi;
pi = PendingIntent.getBroadcast( this, alrmId, in,0 );
AlarmManager am;
am = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pi);
}
接下来,您需要让接收器捕捉这个 Firing 事件并显示通知、发出声音、振动设备。为此,我将向项目添加 ReminderReceiver 类,
public class ReminderReceiver extends BroadcastReceiver {
// Vibrator object
public Vibrator vibrator;
long[] pattern = { 0L, 250L, 200L, 250L, 200L, 250L, 200L, 250L, 200L,
250L, 200L, 250L, 200L, 250L, 200L };
// Ringtone object
Uri ringT;
Ringtone ringTone;
@Override
public void onReceive(Context context, Intent intent) {
String remindText = intent.getStringExtra("text");
//Unique notification id for every alarm
int receiverID = intent.getIntExtra("AlrmId", 0);
// Notification creation
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
context).setSmallIcon(android.R.drawable.ic_popup_reminder)
.setContentTitle("Reminder").setContentText(remindText);
// Create vibrator pattern
vibrator = (Vibrator) context
.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern, -1);// No repetition
// Notification tone creation and play
ringT = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
ringTone = RingtoneManager.getRingtone(context, ringT);
ringTone.play();
// Create toast and show on center of the screen
Toast toast = Toast.makeText(context, remindText, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
// end of toast...
// Show status bar notification
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(receiverID, mBuilder.build());
}
全做完了 !!!就一件事,在Android Manifest.xml中设置权限
<uses-permission android:name="android.permission.VIBRATE" />
然后注册 ReminderReceiver 类,在 <application> </application>
中添加这一行标签(不在任何其他标签内!!!),
<receiver android:name=".ReminderReceiver">
</receiver>
希望对您有所帮助。
干杯!!!
我在谷歌上搜索了很多,但没有找到解决方案或任何实现它的提示。
而且这段代码也不适合我。它不会在 native 日历中创建任何事件。我检查了模拟器、bluestack 以及我的手机(未创建 apk 文件)。
请帮助我解决任何其他问题或改进这个问题
这Link可以完全满足您的要求。
关于android - 如何通过用户应用程序将日期设置为设备日历并在android中获取提醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22834800/