`
1028826685
  • 浏览: 936796 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

Android中的日历操作

 
阅读更多
日历的操作方法,这里主要用到了ContentProiver的知识.如果大家不明白ContentProvider建议先查一下资料,知道它是干什么的。这样更容易下面的例子.
好了废话不说,这里提个醒,Android中的日历,只有真机才有,模拟上是没有的,所以测试环境一定要真机!!
因为日历是系统自带的,所以我们读写它一定要申请权限,也就是在AndroidManifest.xml加如下两行代码(一个读一个写):
view plain
1. <uses-permission android:name="android.permission.READ_CALENDAR"/>  
2. <uses-permission android:name="android.permission.WRITE_CALENDAR"/>  
Android中日历用了三个URL,分别是日历用户的URL,事件的URL,事件提醒URL,三个URL在Android2.1之前是如下的样子:
view plain
1. calanderURL = "content://calendar/calendars"; 
2. calanderEventURL = "content://calendar/events"; 
3. calanderRemiderURL= "content://calendar/reminders"; 
但是在Android2.2版本以后,三个URL有了改变,变成如下的样子:
view plain
1. calanderURL = "content://com.android.calendar/calendars"; 
2. calanderEventURL = "content://com.android.calendar/events"; 
3. calanderRemiderURL = "content://com.android.calendar/reminders"; 
 
还是老样子,为了让大家更好的理解,我写了一个简单的Demo,大家按照我的步骤一步一步的来:
第一步:新建一个Android工程命名为CalendarDemo.
第二步:修改main.xml布局文件,增加了三个按钮,代码如下:
view plain
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
   <TextView   
    android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
    android:text="@string/hello" 
    /> 
   <Button 
        android:id="@+id/readUserButton" 
        android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="Get a User" 
    />    
    <Button 
        android:id="@+id/readEventButton" 
        android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="Get a Event" 
    /> 
     <Button 
        android:id="@+id/writeEventButton" 
        android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="Input a Event" 
    /> 
</LinearLayout> 

第三步:修改主核心程序CalendarDemo.java,代码如下:
view plain
package com.liyong;

import java.util.Calendar;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class CalendarActivity extends Activity implements OnClickListener { 
    private Button mReadUserButton; 
    private Button mReadEventButton; 
    private Button mWriteEventButton; 
     
    private static String calanderURL = ""; 
    private static String calanderEventURL = ""; 
    private static String calanderRemiderURL = ""; 
    //为了兼容不同版本的日历,2.2以后url发生改变 
    static{ 
        if(Integer.parseInt(Build.VERSION.SDK) >=
            calanderURL = "content://com.android.calendar/calendars"; 
            calanderEventURL = "content://com.android.calendar/events"; 
            calanderRemiderURL = "content://com.android.calendar/reminders"; 
 
        }else{ 
            calanderURL = "content://calendar/calendars"; 
            calanderEventURL = "content://calendar/events"; 
            calanderRemiderURL = "content://calendar/reminders";         
        } 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        setupViews(); 
    } 
     
    private void setupViews(){ 
        mReadUserButton = (Button)findViewById(R.id.readUserButton); 
        mReadEventButton = (Button)findViewById(R.id.readEventButton); 
        mWriteEventButton = (Button)findViewById(R.id.writeEventButton); 
        mReadUserButton.setOnClickListener(this); 
        mReadEventButton.setOnClickListener(this); 
        mWriteEventButton.setOnClickListener(this); 
    } 
     
    @Override 
    public void onClick(View v) { 
        if(v == mReadUserButton){


            Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,  
                    null, null, null); 
            if(userCursor.getCount() > 0){ 
                userCursor.moveToFirst(); 
                String userName = userCursor.getString(userCursor.getColumnIndex("name")); 
                Toast.makeText(CalendarActivity.this, userName, Toast.LENGTH_LONG).show(); 
            } 
      }else if(v == mReadEventButton){ 
            Cursor eventCursor = getContentResolver().query(Uri.parse(calanderEventURL), null,  
                    null, null, null); 
            if(eventCursor.getCount() > 0){ 
                eventCursor.moveToLast(); 
                String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title")); 
               Toast.makeText(CalendarActivity.this, eventTitle, Toast.LENGTH_LONG).show(); 
            } 
        }else if(v == mWriteEventButton){ 
            //获取要出入的gmail账户的id 
            String calId = ""; 
            Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,  
                    null, null, null); 
            if(userCursor.getCount() > 0){ 
                userCursor.moveToFirst(); 
                calId = userCursor.getString(userCursor.getColumnIndex("_id")); 
                 
            } 
            ContentValues event = new ContentValues(); 
            event.put("title", "与苍井空小姐动作交流"); 
            event.put("description", "Frankie受空姐邀请,今天晚上10点以后将在Sheraton动作交流.lol~"); 
            //插入hoohbood@gmail.com这个账户 
            event.put("calendar_id",calId); 
             
            Calendar mCalendar = Calendar.getInstance(); 
            mCalendar.set(Calendar.HOUR_OF_DAY,10); 
            long start = mCalendar.getTime().getTime(); 
            mCalendar.set(Calendar.HOUR_OF_DAY,11); 
            long end = mCalendar.getTime().getTime(); 
             
            event.put("dtstart", start); 
            event.put("dtend", end); 
            event.put("hasAlarm",1); 
             
            Uri newEvent = getContentResolver().insert(Uri.parse(calanderEventURL), event); 
            long id = Long.parseLong( newEvent.getLastPathSegment() ); 
            ContentValues values = new ContentValues(); 
            values.put( "event_id", id ); 
            //提前10分钟有提醒 
            values.put( "minutes", 10 ); 
            getContentResolver().insert(Uri.parse(calanderRemiderURL), values); 
            Toast.makeText(CalendarActivity.this, "插入事件成功!!!", Toast.LENGTH_LONG).show(); 
        } 
    } 


权限:  <uses-permission android:name="android.permission.READ_CALENDAR"/>  
     <uses-permission android:name="android.permission.WRITE_CALENDAR"/>

来至于网络。。。
分享到:
评论

相关推荐

    Android系统日历日程操作.rar

    在Android系统中,日历和日程管理是用户日常安排工作、生活的重要工具。...如果"Android系统日历日程操作"的压缩包中包含具体教程,用户可以通过学习这些知识来提升自己在Android设备上的日历使用体验。

    Android系统日历日程操作.zip

    本资源“Android系统日历日程操作.zip”包含的源码提供了有关如何在Android平台上进行日历操作的实例。下面将详细探讨Android系统日历日程操作的相关知识点。 1. **日历API** Android提供了`CalendarContract`类,...

    安卓Android源码——安卓Android系统日历日程操作.rar

    在CalendarDemo中,我们可以看到如何使用这些接口来实现基本的日历操作。 1. **添加日历事件**: 使用`ContentResolver`的`insert()`方法,配合`CalendarContract.Events.CONTENT_URI`,可以向日历中添加新的事件...

    Android应用源码之Android系统日历日程操作.zip_android_android 日程demo

    这个名为"Android应用源码之Android系统日历日程操作"的压缩包提供了关于如何在Android系统中进行日历操作的源码示例。通过分析这个示例,我们可以学习到以下几个关键知识点: 1. **Android日历权限**: 在Android...

    Android应用源码之Android系统日历日程操作.zip

    10. **异步操作**:考虑到日历操作可能会影响应用性能,建议使用异步任务或Android的异步处理框架(如`AsyncTask`或`LiveData`)。 通过分析这个源码,开发者可以学习到如何在实际项目中有效地管理和操作Android...

    Android代码-Android系统日历日程操作.zip

    在"CalendarDemo"源码中,可能会包含以上各种操作的实例代码,你可以通过阅读和理解这些代码,掌握Android日历API的使用方法。同时,"JavaApk源码说明.txt"可能是对这些代码的解释和指导,可以帮助你更好地理解和...

    Android 自带日历日程事件操作 calendar

    在Android平台上,日历日程事件操作是许多应用程序的核心功能之一,它允许用户管理他们的日常事务,设置提醒,以及与其他应用程序和服务同步。本教程将深入探讨如何使用Android自带的日历API来实现CRUD(创建、读取...

    Android应用源码之Android系统日历日程操作

    1. **Android日历API** Android提供了一个内置的日历API,允许开发者访问和修改用户设备上的日历数据。这个API主要包含在`android.provider.CalendarContract`类及其子类中。`CalendarContract`提供了用于读取、...

    android谷歌日历源码 android日历源码 android 源码

    7. **同步适配器(SyncAdapter)**:Android日历源码使用SyncAdapter来同步远程日历数据,这是在Android中进行后台数据同步的标准方式。 8. **通知与警报**:源码中包含了如何使用NotificationManager和AlarmManager...

    Android日历行程.rar

    11. **异步请求**:使用`AsyncTask`或`LiveData`等异步机制,可以实现日历操作的异步加载和更新,保证界面流畅。 12. **AndroidX库**:随着Android框架的发展,现在的开发推荐使用AndroidX库,其中的`androidx.core...

    Android日历签到

    综上所述,实现“Android日历签到”功能,需要掌握Android日历API的使用,包括获取日历权限、查询日历源、创建和管理日历事件,以及在UI上展示签到信息。通过这一系列步骤,用户就能在自己的Android设备上方便地进行...

    android4.0 日历源码

    在Android 4.0(Ice Cream Sandwich)系统中,日历功能是用户...通过深入研究这些内容,开发者可以更好地理解和定制Android日历功能,提升用户体验。同时,对源码的熟悉也有助于解决系统级别的问题和进行定制化开发。

    Android 日历、Android 农历日历 Android 日历节假日

    以下是对标题“Android日历、Android农历日历、Android日历节假日”以及描述中所述知识点的详细阐述。 1. **Android日历API**: Android提供了`android.provider.CalendarContract`类,它是Android系统日历服务的...

    android实现日历控件

    在Android应用开发中,日历控件是一种常用的组件,它允许用户方便地选择日期,常用于事件安排、约会提醒等功能。本压缩包提供的是关于如何在Android中实现自定义日历控件的源代码示例。下面将详细介绍如何在Android...

    android Calender 日历记事软件代码

    Android3.0以上系统 提供了CalenderView 日历控件。本人就是利用此控件进行开发,实现了基本的日历记事功能,点击日历中的某一日,可显示这一天的记事列表,亦可对当日新建记事,删除,编辑等。界面简洁干净,绝对...

    Android日历可左右活动上下定位收缩

    "Android日历可左右活动上下定位收缩"这个项目的核心在于实现一个高度自定义的日历控件,以下将详细解释实现这一功能的关键知识点。 首先,我们需要了解Android的View体系结构。在Android中,自定义视图通常继承自...

    Android简易日历Demo

    在Android平台上,开发...这个"Android简易日历Demo"将带你逐步了解上述技术,通过实践,你将能熟练掌握Android日历功能的开发。在实际开发中,还可以根据需求进行扩展,例如添加多语言支持、日程同步功能或云备份等。

    android日历的实现

    总之,实现一个Android日历功能涉及多个方面,包括UI布局、日期处理逻辑、事件处理、性能优化和兼容性考虑。通过自定义控件,你可以根据需求打造出独特且功能完善的日历组件。在实际开发过程中,不断调试和优化,...

    android日历demo

    本示例"android日历DemoCalendar"提供了一个完整的日历应用实例,适用于初学者和开发者学习使用。下面我们将详细探讨这个Demo中涉及的关键知识点。 1. **Android Calendar API**:Android系统提供了Calendar API,...

    android 日期日历源码

    在Android开发中,日期日历功能是不可或缺的一部分,它允许用户查看、选择和管理日期相关的事件。本资源提供了一个关于Android日期日历的源码示例,帮助开发者深入理解其工作原理并进行自定义实现。以下是对这个源码...

Global site tag (gtag.js) - Google Analytics