首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android中的年历操作

2012-09-28 
Android中的日历操作日历的操作方法,这里主要用到了ContentProiver的知识.如果大家不明白ContentProvider

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"/>

来至于网络。。。

热点排行