2012年1月22日日曜日

Intent経由でGoogleカレンダーに予定を追加する方法

コード
Intent intent = new Intent(Intent.ACTION_EDIT);  
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("title", "予定のタイトル");
intent.putExtra("description", "予定の内容");
intent.putExtra("beginTime", eventStartInMillis); //開始日時
intent.putExtra("endTime", eventEndInMillis); //終了日時
startActivity(intent);

メモ
今回の方法では
1. IntentでGoogleカレンダーの新規予定作成画面を起動
2. Intentに設定したタイトル等の情報が新規作成画面に反映される
3. ユーザー操作で登録先カレンダー変更・通知設定等を行い、予定の追加完了
という流れになります。

Intentを使わない方法と比較すると若干ユーザー操作が増えるというデメリットがありますが、下記のメリットもあるかと思います。
・予定追加の際、更にユーザーが内容を追記できる
・自分のアプリにカレンダー読み書きのパーミッションを付加しなくてもよい

開始日時/終了日時はエポックタイムで指定します。
私はCalendarクラスのgetTimeInMillis()メソッドを使用して指定しました。

因みに、「ジョルテ」がインストールされていると、Intentに「ジョルテ」も反応しますが設定した予定の情報を渡すことは出来ませんでした。
データの渡し方が分かれば「ジョルテ」にも対応できるんじゃないかと思います。

上記コードは2.2(Froyo)、4.0(ICS)で動作確認を行っています。

参考にしたサイト
自転車で通勤しましょ♪ブログ
「ANDROID:カレンダーにINTENTを発行する」
http://319ring.net/blog/archives/1596
Stack Overflow
「How to launch Android Calendar application using Intent(Froyo)」
http://stackoverflow.com/questions/4373074/how-to-launch-android-calendar-application-using-intent-froyo

2012年1月15日日曜日

AdMob 4.3.1 メモ

ライブラリ追加
プロジェクトフォルダ直下に/libsディレクトリを作成
GoogleAdMobAdsSdk-4.3.1.jarを/libsディレクトリへコピー
Java Build PathのAdd JARs...から上記ライブラリを追加

AndroidManifest.xml
パーミッションの追加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Activityの追加
<activity
android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
↑Project Build Targetを3.x以上?にしないと使えないパラメータが入っているので必要に応じてTarget SDK Versionを上げる

layoutファイル
    <com.google.ads.AdView
        android:id="@+id/adview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        ads:adSize="BANNER"
        ads:adUnitId="パブリッシャーID" />

コード
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mAdView = (AdView) findViewById(R.id.adview);
        AdRequest adRequest = new AdRequest();
        adRequest.addTestDevice(AdRequest.TEST_EMULATOR); //テスト用バナーを表示する
        mAdView.loadAd(adRequest);
    }

    @Override
    protected void onDestroy() {
        mAdView.destroy();
        super.onDestroy();
    }
上記コードを実行するとLogCatに I/Ads(32576): To get test ads on this device, call adRequest.addTestDevice("*****..."); なログが出るので#addTestDeviceのAdRequest.TEST_EMULATORを*****...に置き換える これにより、開発者向けテスト用のバナーが表示されるようになる