4

PhoneGap (別名 Cordova) を使用して Android アプリを作成していますが、カレンダーの統合が機能しません。 免責事項:私は Android と PhoneGap の両方に初心者です。ご容赦ください。

私がやろうとしているのは、ユーザーのカレンダーにイベントを追加することだけです。このチュートリアルに従って、Calendar Intent を起動しようとするプラグインを作成しました。コードは次のようになります。

public class CalendarPlugin extends Plugin {
public static final String NATIVE_ACTION_STRING="addToCalendar"; 
public static final String SUCCESS_PARAMETER="success"; 

@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
    if (NATIVE_ACTION_STRING.equals(action)) { 
        Calendar beginTime = Calendar.getInstance();
        beginTime.set(2012, 6, 19, 7, 30);
        Calendar endTime = Calendar.getInstance();
        endTime.set(2012, 6, 19, 8, 30);

        Intent calIntent = new Intent((Context) this.ctx, CalendarPlugin.class)
            .setAction(Intent.ACTION_INSERT)
            .putExtra(Events.TITLE, "A new event")
            .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());

        this.ctx.startActivity(calIntent);
        return new PluginResult(PluginResult.Status.OK, "Smashing success");
    }

return new PluginResult(PluginResult.Status.ERROR, "Didn't work bro");
}
}

このプラグインを呼び出す Javascript コードは標準です。

var CalendarPlugin = { 
    callNativeFunction: function (success, fail, resultType) { 
        if (cordova) {
            return cordova.exec( success, fail, 
                "org.myorg.appname.CalendarPlugin", 
                "addToCalendar", [resultType]);
        }
        else {
            alert("Calendar function is not available here.");
        }
    } 
};

Android コードが呼び出されています (ブレークポイントを使用して確認)。しかし、Javascript コードに返される結果はエラーです。

明示的なアクティビティ クラス {org.myorg.appname/org.myorg.appname.CalendarPlugin} が見つかりません。AndroidManifest.xml でこのアクティビティを宣言しましたか?

チュートリアルで AndroidManifest.xml に追加することについて言及されていないため、何かが足りないと思います (また、CalendarPluginコードが正常に呼び出されているため、CalendarPluginクラスが見つからないというエラーが発生する可能性はありますか? )。本当にCalendarPluginをマニフェストに追加する必要がある場合、どうすればよいでしょうか?

4

2 に答える 2

5

引用されたチュートリアルは意図をカバーしていませんでした。データを送信するインテントは、インテントを処理しないため、あなたが望むものではない独自の CalendarPlugIn クラスです。

インテントについてはhttp://developer.android.com/guide/topics/intents/intents-filters.htmlを参照してください。

また、SO を検索すると、ICS が登場するまで、Web サービスを使用せずに正式に Google カレンダーに追加する方法さえなかったことがわかります。非公式に行う方法はありますが、Google または ODM 自体の気まぐれに左右されます。

更新しました:

(プラグインを介して) Phonegap でインテントを使用できるはずです。コメントを追加したのは、アプリにカレンダーを統合する予定がある場合、大多数の Android デバイスをサポートしたい場合は、おそらく少し調査を行う必要があることを指摘するためです。ICS にカレンダー イベントを追加することに興味がある場合は、http: //developer.android.com/reference/android/provider/CalendarContract.htmlを参照してください。

Opの編集

Intentコンストラクターを修正する必要がありましたが、これは期待どおりに機能しました。

Uri uri = Uri.parse("content://com.android.calendar/events");
Intent calIntent = new Intent("android.intent.action.INSERT", uri)
于 2012-06-03T22:16:56.307 に答える
0

すべての Android SDK バージョンで機能させるには、次のコードを試してください

 Intent intent = new Intent(Intent.ACTION_EDIT);
 intent.setType("vnd.android.cursor.item/event");

私は私のために働いてみました。

于 2012-12-11T08:47:04.513 に答える