1

私のアプリケーションでは、コード/プログラムを使用してデバイスのデフォルト カレンダーを開きたいと考えています。私はこのコードを使用しています:

private void viewAllCalender() {
        // TODO Auto-generated method stub
        Intent i = new Intent();
        if(Build.VERSION.SDK_INT >= 8 && Build.VERSION.SDK_INT <= 14){
            i.setClassName("com.android.calendar","com.android.calendar.LaunchActivity");
        }else if(Build.VERSION.SDK_INT >= 15){    
            i.setClassName("com.google.android.calendar", "com.android.calendar.LaunchActivity");
        }else{
            i.setClassName("com.android.calendar","com.android.calendar.LaunchActivity");
        }
        startActivity(i);
    }

すべてのデバイスで機能しますが、SAMSUNG S3 では機能しません - (ビルド SDK バージョン - 17)

問題が何であるかを理解するのを手伝ってください??

ありがとう

4

2 に答える 2

2

Android デバイスに特定のアプリケーションがあるとは期待できないことを認識しておく必要があります。プレイアプリさえもインストールされることは期待できません。これを行う正しい方法は、単純に .setClassName を使用せず、何をすべきかをユーザーに決定させることです。

多数の異なるカレンダー アプリがあり、電話メーカーにはそれぞれ独自のアプリがあります。

編集

イベントをカレンダーに追加したい場合は、これらの問題の多くを処理する私の CalendarOrganizer を使用できます。

public class CalendarOrganizer {
    private final static int ICE_CREAM_BUILD_ID = 14;
    /**
     * Creates a calendar intent going from startTime to endTime
     * @param startTime
     * @param endTime
     * @param context
     * @return true if the intent can be handled and was started, 
     * false if the intent can't be handled
     */
    public static boolean createEvent(long startTime, long endTime, String title, String description, 
            String location, boolean isAllDay, Context context) {
        Intent intent = new Intent(Intent.ACTION_EDIT);
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < ICE_CREAM_BUILD_ID) {
            // all SDK below ice cream sandwich
            intent.setType("vnd.android.cursor.item/event");
            intent.putExtra("beginTime", startTime);
            intent.putExtra("endTime", endTime);
            intent.putExtra("title", title);
            intent.putExtra("description", description);
            intent.putExtra("eventLocation", location);
            intent.putExtra("allDay", isAllDay);

//          intent.putExtra("rrule", "FREQ=YEARLY");
        } else {
            // ice cream sandwich and above
            intent.setType("vnd.android.cursor.item/event");
            intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime);
            intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime);
            intent.putExtra(Events.TITLE, title);
            intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
            intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY , isAllDay);
            intent.putExtra(Events.DESCRIPTION, description);
            intent.putExtra(Events.EVENT_LOCATION, location);

//          intent.putExtra(Events.RRULE, "FREQ=DAILY;COUNT=10") 
        }
        try {
            context.startActivity(intent);
            return true;
        } catch(Exception e) {
            return false;
        }
    }
}
于 2013-02-27T06:32:53.400 に答える
0

カレンダー アプリケーションを開くには、インテント ビュー ガイドhttp://developer.android.com/guide/topics/providers/calendar-provider.html#intent-viewを参照してください。

于 2013-02-27T07:31:48.583 に答える