0

コード

次のように、Android アプリケーションに Calendar Intent を実装しました。

Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(Events.CONTENT_URI);
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, parsedStartTime.toMillis(false))
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, parsedEndTime.toMillis(false))
intent.putExtra(Events.TITLE, eventInfo.getName())
intent.putExtra(Events.DESCRIPTION, eventInfo.getText())
intent.putExtra(Events.EVENT_LOCATION, eventInfo.getWhere())
intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
startActivity(intent);

問題

公式の開発者ガイドにあるように、一部のデバイスで問題が発生するように見えるためACTION_EDIT、私は を使用ACTION_INSERTしました。

今、このコードは私がテストしたデバイスで問題なく動作します。これらには、Android 4.1.2 カスタム ROM を搭載した Motorola Defy+ と、Samsung の Android 4.1.2 を搭載した Samsung Galaxy SIII Mini が含まれます。

しかし、Android 4.0.4 を搭載した Samsung Galaxy SII でアプリがクラッシュするという報告があります。具体的にはエラーで:

android.content.ActivityNotFoundException

悲しいことに、これは私が得たすべての情報です。私は電話自体にアクセスできないためです (ユーザーからのものです)。アナリティクスからエラーが発生しました。


質問

この投稿で見たように、Samsung とカレンダー プロバイダーには何らかの問題があります。この電話で Calendar Intents を使用する方法はありますか? または、getContentResolver() を使用する必要がありますか?

この場合、カレンダーのアクセス許可をアプリに追加する必要があると思いますが、ユーザーはイベントを保存するカレンダーを選択できません。

どんな助けでも大歓迎です!

4

1 に答える 1

1

OK、問題が見つかりました。クライアントには、Calendar Intent を処理するための Calendar アプリがインストールされていませんでした。これが可能だとは思いませんでした。

この場合のオプションは、インテントを処理できるアプリがあるかどうかを確認するテストを追加することです。

インテントが利用可能かどうかを確認するには、次を使用できます。

public static boolean isAvailable(Context ctx, Intent intent) {
        final PackageManager mgr = ctx.getPackageManager();
        List<ResolveInfo> list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
}

そして、インテントを引数としてこの関数に渡します。

于 2013-10-07T17:09:52.127 に答える