Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android高手進階教程(二十三)之——Android中的日歷讀寫操作

Android高手進階教程(二十三)之——Android中的日歷讀寫操作

編輯:Android開發實例

今天給大家分享一下Android中一些自帶日歷的操作方法,這裡主要用到了ContentProiver的知識.如果大家不明白ContentProvider建議先查一下資料,知道它是干什麼的。這樣更容易下面的例子.

好了廢話不說,這裡提個醒,Android中的日歷,只有真機才有,模擬上是沒有的,所以測試環境一定要真機!!

因為日歷是系統自帶的,所以我們讀寫它一定要申請權限,也就是在AndroidManifest.xml加如下兩行代碼(一個讀一個寫):

 

  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之前是如下的樣子:

 

  1. calanderURL = "content://calendar/calendars";  
  2. calanderEventURL = "content://calendar/events";  
  3. calanderRemiderURL= "content://calendar/reminders"; 

但是在Android2.2版本以後,三個URL有了改變,變成如下的樣子:

  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布局文件,增加了三個按鈕,代碼如下:

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     > 
  7.    <TextView    
  8.     android:layout_width="fill_parent"   
  9.         android:layout_height="wrap_content"   
  10.     android:text="@string/hello" 
  11.     /> 
  12.    <Button 
  13.         android:id="@+id/readUserButton" 
  14.         android:layout_width="fill_parent"   
  15.     android:layout_height="wrap_content"   
  16.     android:text="Get a User" 
  17.     />     
  18.     <Button 
  19.         android:id="@+id/readEventButton" 
  20.         android:layout_width="fill_parent"   
  21.     android:layout_height="wrap_content"   
  22.     android:text="Get a Event" 
  23.     /> 
  24.      <Button 
  25.         android:id="@+id/writeEventButton" 
  26.         android:layout_width="fill_parent"   
  27.     android:layout_height="wrap_content"   
  28.     android:text="Input a Event" 
  29.     /> 
  30. </LinearLayout> 

第三步:修改主核心程序CalendarDemo.java,代碼如下:

  1. package com.tutor.calendardemo;  
  2.  
  3. import java.util.Calendar;  
  4.  
  5. import android.app.Activity;  
  6. import android.content.ContentValues;  
  7. import android.database.Cursor;  
  8. import android.net.Uri;  
  9. import android.os.Build;  
  10. import android.os.Bundle;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. import android.widget.Toast;  
  15.  
  16. public class CalendarDemo extends Activity implements OnClickListener {  
  17.     private Button mReadUserButton;  
  18.     private Button mReadEventButton;  
  19.     private Button mWriteEventButton;  
  20.       
  21.     private static String calanderURL = "";  
  22.     private static String calanderEventURL = "";  
  23.     private static String calanderRemiderURL = "";  
  24.     //為了兼容不同版本的日歷,2.2以後url發生改變  
  25.     static{  
  26.         if(Integer.parseInt(Build.VERSION.SDK) >= 8){  
  27.             calanderURL = "content://com.android.calendar/calendars";  
  28.             calanderEventURL = "content://com.android.calendar/events";  
  29.             calanderRemiderURL = "content://com.android.calendar/reminders";  
  30.  
  31.         }else{  
  32.             calanderURL = "content://calendar/calendars";  
  33.             calanderEventURL = "content://calendar/events";  
  34.             calanderRemiderURL = "content://calendar/reminders";          
  35.         }  
  36.     }  
  37.     @Override 
  38.     public void onCreate(Bundle savedInstanceState) {  
  39.         super.onCreate(savedInstanceState);  
  40.         setContentView(R.layout.main);  
  41.           
  42.         setupViews();  
  43.     }  
  44.       
  45.     private void setupViews(){  
  46.         mReadUserButton = (Button)findViewById(R.id.readUserButton);  
  47.         mReadEventButton = (Button)findViewById(R.id.readEventButton);  
  48.         mWriteEventButton = (Button)findViewById(R.id.writeEventButton);  
  49.         mReadUserButton.setOnClickListener(this);  
  50.         mReadEventButton.setOnClickListener(this);  
  51.         mWriteEventButton.setOnClickListener(this);  
  52.     }  
  53.       
  54.     @Override 
  55.     public void onClick(View v) {  
  56.         if(v == mReadUserButton){  
  57.               
  58.             Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,   
  59.                     null, null, null);  
  60.             if(userCursor.getCount() > 0){  
  61.                 userCursor.moveToFirst();  
  62.                 String userName = userCursor.getString(userCursor.getColumnIndex("name"));  
  63.                 Toast.makeText(CalendarDemo.this, userName, Toast.LENGTH_LONG).show();  
  64.             }  
  65.         }else if(v == mReadEventButton){  
  66.             Cursor eventCursor = getContentResolver().query(Uri.parse(calanderEventURL), null,   
  67.                     null, null, null);  
  68.             if(eventCursor.getCount() > 0){  
  69.                 eventCursor.moveToLast();  
  70.                 String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));  
  71.                 Toast.makeText(CalendarDemo.this, eventTitle, Toast.LENGTH_LONG).show();  
  72.             }  
  73.         }else if(v == mWriteEventButton){  
  74.             //獲取要出入的gmail賬戶的id  
  75.             String calId = "";  
  76.             Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,   
  77.                     null, null, null);  
  78.             if(userCursor.getCount() > 0){  
  79.                 userCursor.moveToFirst();  
  80.                 calId = userCursor.getString(userCursor.getColumnIndex("_id"));  
  81.                   
  82.             }  
  83.             ContentValues event = new ContentValues();  
  84.             event.put("title", "與蒼井空小姐動作交流");  
  85.             event.put("description", "Frankie受空姐邀請,今天晚上10點以後將在Sheraton動作交流.lol~");  
  86.             //插入[email protected]這個賬戶  
  87.             event.put("calendar_id",calId);  
  88.               
  89.             Calendar mCalendar = Calendar.getInstance();  
  90.             mCalendar.set(Calendar.HOUR_OF_DAY,10);  
  91.             long start = mCalendar.getTime().getTime();  
  92.             mCalendar.set(Calendar.HOUR_OF_DAY,11);  
  93.             long end = mCalendar.getTime().getTime();  
  94.               
  95.             event.put("dtstart", start);  
  96.             event.put("dtend", end);  
  97.             event.put("hasAlarm",1);  
  98.               
  99.             Uri newEvent = getContentResolver().insert(Uri.parse(calanderEventURL), event);  
  100.             long id = Long.parseLong( newEvent.getLastPathSegment() );  
  101.             ContentValues values = new ContentValues();  
  102.             values.put( "event_id", id );  
  103.             //提前10分鐘有提醒  
  104.             values.put( "minutes", 10 );  
  105.             getContentResolver().insert(Uri.parse(calanderRemiderURL), values);  
  106.             Toast.makeText(CalendarDemo.this, "插入事件成功!!!", Toast.LENGTH_LONG).show();  
  107.         }  
  108.     }  

  

第四步:在AndroidManifest.xml中申請權限,代碼如下:

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.       package="com.tutor.calendardemo" 
  4.       android:versionCode="1" 
  5.       android:versionName="1.0"> 
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
  7.         <activity android:name=".CalendarDemo" 
  8.                   android:label="@string/app_name"> 
  9.             <intent-filter> 
  10.                 <action android:name="android.intent.action.MAIN" /> 
  11.                 <category android:name="android.intent.category.LAUNCHER" /> 
  12.             </intent-filter> 
  13.         </activity> 
  14.     </application> 
  15.     <uses-sdk android:minSdkVersion="7" /> 
  16.     <uses-permission android:name="android.permission.READ_CALENDAR"/>   
  17.     <uses-permission android:name="android.permission.WRITE_CALENDAR"/>   
  18. </manifest>  

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

                  運行首界面                                                      獲取登錄賬戶名

 

                         獲取事件title                                             插入一個事件

 

                     查看日歷多了一條事件                                       查看事件詳情

Ok今天就講到這裡,呵呵~

源代碼下載

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved