大家好,请有人帮助我,我想通过我的应用程序将事件设置到设备日历。我需要从edittext(这是用户输入)获取日期并点击按钮(比如设置日期)它应该作为事件保存到设备日历。在上述日期,它应该提醒应用程序用户有关该事件。
我已经尝试了很多,但我无法做到这一点。作为一名大学生,我尝试了我的水平,但真的需要别人帮助..
请人们,如果有人知道它让我知道解决方案(如果提供了示例,那将是一个很大的帮助(请不要只告诉我关于api,使用calendarprovider和这,我需要适当的例子))。
提前致谢
我已通过以下代码打开设备日历。这允许我手动设置事件,但我想在单击按钮后自动设置事件。 在这方面有人可以帮助我吗? 意图i =新的Intent();
// Froyo或更高(请注意,我刚刚在CM7上对此进行了测试,而且运行时间不够好,因此取决于手机......) 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); startActivity(ⅰ);
上面的代码显示了原生日历,并允许用户自己设置事件。 但我不希望这种情况发生,相反,我希望原生日历能够接受用户输入和放大。设置event.So为此我已经实现了以下代码: 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); 但这不起作用。但是,我不想硬编码它,它应该接受用户输入(动态它应该工作,比如获取edittext数据并通过意图)。 请有人帮我这方面吗?
答案 0 :(得分:1)
在单独使用此答案之前,您必须在Google上进行一些搜索。那是你能以完美的方式学习新东西的唯一方法
1)报警管理器
2)广播接收器
3)意图和应用背景
好的,我们走了;
首先,您需要获取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);
}
接下来,您需要让接收器捕捉此射击事件并显示通知,发出声音,振动设备。为此,我将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>
希望这会对你有所帮助。
干杯!!!
我已经google了很多,但我没有找到解决方案或任何提示来实现它。 这段代码也不适合我。它不会在本机日历中创建任何事件。我检查了模拟器,bluestack以及我的手机(apk文件没有被创建)。 请帮助我解决任何其他问题或改进这个解决方案 Link可能会满足您的要求。