13

以前このフォーラムで質問されたことは知っていますが、ここに書かれていることをすべて試してみましたが、まだうまくいきません。私がやりたいことは、カレンダーにイベントを挿入することです。私のデバイスにはいくつかのカレンダー アプリケーションがあるため、ユーザーがマップ アプリケーションを使用して場所を表示しようとした場合と同様に、どのカレンダー アプリケーションに新しいイベントを含めるかをユーザーが選択できるようにしたいと考えています (ユーザーは、マップ アプリケーションを使用するかどうかを選択できます)。 Google マップ、インターネット、...) を有効にします。このため、インテントを使用する必要があります。

ところで、Intents を使用して新しいイベントをカレンダーに挿入できるのは、SDK バージョン 14 以降を搭載したデバイスのみであることを認識しています。私のデバイスの API レベルは 15 で、カレンダー API をサポートしています。

これが私のコードです:

Intent calendarIntent = new Intent(Intent.ACTION_INSERT);
calendarIntent.setData(Events.CONTENT_URI);
calendarIntent.putExtra(Events.TITLE, "title");
calendarIntent.putExtra(Events.EVENT_LOCATION, "address");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.HOUR_OF_DAY, 20);
cal.set(Calendar.MINUTE, 0);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, cal.getTime().getTime());
cal.set(Calendar.HOUR_OF_DAY, 20);
cal.set(Calendar.MINUTE, 30);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, cal.getTime().getTime());
ctx.startActivity(calendarIntent);

私はこの例外を受け取ります:

02-04 17:55:23.957: E/AndroidRuntime(3781): FATAL EXCEPTION: main
02-04 17:55:23.957: E/AndroidRuntime(3781): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.applicat.meuchedet/com.applicat.meuchedet.MainScreenActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT dat=content://com.android.calendar/events (has extras) }
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.os.Looper.loop(Looper.java:137)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.ActivityThread.main(ActivityThread.java:4507)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at java.lang.reflect.Method.invokeNative(Native Method)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at java.lang.reflect.Method.invoke(Method.java:511)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at dalvik.system.NativeStart.main(Native Method)
02-04 17:55:23.957: E/AndroidRuntime(3781): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT dat=content://com.android.calendar/events (has extras) }
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1535)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1387)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.Activity.startActivityForResult(Activity.java:3190)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at com.applicat.meuchedet.Screen.startActivity(Screen.java:433)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at com.applicat.meuchedet.CalendarAppointmentScheduler.writeAppointmentToCalendar(CalendarAppointmentScheduler.java:137)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at com.applicat.meuchedet.MainScreenActivity.onCreate(MainScreenActivity.java:258)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.Activity.performCreate(Activity.java:4465)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
02-04 17:55:23.957: E/AndroidRuntime(3781):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
02-04 17:55:23.957: E/AndroidRuntime(3781):     ... 11 more

私は何を間違っていますか?

ありがとう

4

4 に答える 4

25

どのアクティビティもアクションを処理できないため、ActivityNotFoundException をキャッチしました。

Intent.ACTION_INSERTを使用する代わりに、次のようにしてみてください。

Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(Events.TITLE, strTitle);
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
                    startDateMillis);
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
                    endDateMillis);
intent.putExtra(Events.ALL_DAY, false);// periodicity
            intent.putExtra(Events.DESCRIPTION,strDescription));

他の属性については、開発者向けドキュメントで確認できます。

于 2013-02-04T20:44:55.203 に答える
0

このインテントを処理できる利用可能なアプリがあるかどうかを最初に確認するため、このコードを使用できます。

    fun addToCalenderAction(ctx: Context, session: ItemSession) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        data = CalendarContract.Events.CONTENT_URI
        putExtra(CalendarContract.Events.TITLE, session.title ?: "AA")
        putExtra(CalendarContract.Events.EVENT_LOCATION, session.location
                ?: "Egypt, ALex, ST23")
        putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, parseTimeOfFirebase(session.startTime
                ?: "2021-05-31T19:56:22.636+0000"))
        putExtra(CalendarContract.EXTRA_EVENT_END_TIME, parseTimeOfFirebase(endTime
                ?: "2021-05-31T21:56:22.636+0000"))

    }
    if (intent.resolveActivity(ctx.packageManager) != null) {
        ctx.startActivity(intent)
    }
}

:セッションはいくつかのデータを保持するオブジェクトであり、独自のデータを使用できます

于 2021-06-03T11:17:19.277 に答える