推荐安卓开发神器(里面有各种UI特效和android代码库实例)

今天给大家分享一下Android中一些自带日历的操作方法,这里主要用到了ContentProiver的知识.如果大家不明白ContentProvider建议先查一下资料,知道它是干什么的。这样更容易下面的例子.

好了废话不说,这里提个醒,Android中的日历,只有真机才有,模拟上是没有的,所以测试环境一定要真机!!

因为日历是系统自带的,所以我们读写它一定要申请权限,也就是在AndroidManifest.xml加如下两行代码(一个读一个写):

view plaincopy to clipboardprint?<uses-permission android:name="android.permission.READ_CALENDAR"/>   <uses-permission android:name="android.permission.WRITE_CALENDAR"/>   

Android中日历用了三个URL,分别是日历用户的URL,事件的URL,事件提醒URL,三个URL在Android2.1之前是如下的样子:

view plaincopy to clipboardprint?calanderURL = "content://calendar/calendars";  calanderEventURL = "content://calendar/events";  calanderRemiderURL= "content://calendar/reminders";  



但是在Android2.2版本以后,三个URL有了改变,变成如下的样子:

view plaincopy to clipboardprint?calanderURL = "content://com.android.calendar/calendars";  calanderEventURL = "content://com.android.calendar/events";  calanderRemiderURL = "content://com.android.calendar/reminders

";


还是老样子,为了让大家更好的理解,我写了一个简单的Demo,大家按照我的步骤一步一步的来:

第一步:新建一个Android工程命名为CalendarDemo.

第二步:修改main.xml布局文件,增加了三个按钮,代码如下:

view plaincopy to clipboardprint?<?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 plaincopy to clipboardprint?package com.tutor.calendardemo;    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 CalendarDemo 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) >= 8){              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(CalendarDemo.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(CalendarDemo.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(CalendarDemo.this, "插入事件成功!!!", Toast.LENGTH_LONG).show();          }      }  }  



第四步:在AndroidManifest.xml中申请权限,代码如下:

view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"        package="com.tutor.calendardemo"        android:versionCode="1"        android:versionName="1.0">      <application android:icon="@drawable/icon" android:label="@string/app_name">          <activity android:name=".CalendarDemo"                    android:label="@string/app_name">              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                  <category android:name="android.intent.category.LAUNCHER" />              </intent-filter>          </activity>      </application>      <uses-sdk android:minSdkVersion="7" />      <uses-permission android:name="android.permission.READ_CALENDAR"/>       <uses-permission android:name="android.permission.WRITE_CALENDAR"/>   </manifest>   


第五步:运行上述Android工程,查看效果:











更多相关文章

  1. Android的源代码结构 && 一些常用术语 && Android的支持库 && ap
  2. Android(安卓)NDK编程入门笔记
  3. Android源代码下载指南(图解)
  4. Android沉浸式状态栏最省事的解决方案
  5. Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
  6. [Android1.5]DigitalClock自定义日期输出格式
  7. Android(安卓)NDK
  8. Android切近实战(一)
  9. Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!

随机推荐

  1. 【安卓】关于 Android(安卓)默认字体以及
  2. Andriod ADB Interface驱动安装失败Confi
  3. Android的消息机制
  4. 绿色守护简单使用教程
  5. Android(安卓)IPC(进程间通信)
  6. android 实现欢迎界面
  7. Android(安卓)10、11 存储完全适配(上)
  8. Android周报第二十期
  9. Android(安卓)在百度地图上显示自己的实
  10. 简单了解XML 树结构