2012年7月23日月曜日

EverWebClipper for Evernoteのかゆいトコをかいてみる②

EverWebClipper for Evernoteのかゆいトコをかいてみる


で宣言した通り、EverWebClipperのHelper的なアプリを造ります。


HelperなのでEverWebClipperが受け取る事が出来るIntentは全て受けとれなければなりません。


+αとしてEverWebClipperが受け取れないIntentを受け取ってあげるという手もあります。




ただ、まぁ僕の要件としては、Webページが受け取れればいいのでw


taptuとブラウザからIntent受信できればいいかなと。


本気でやるならEverWebClipperのマニフェストファイルを取得するのが手っ取り早いですかね?




設定したintent-filterは以下の通りです。

使い方間違ってないですかね・・・?(^^;
            <intent-filter>
               <action android:name="android.intent.action.MAIN" />
            </intent-filter>
            <intent-filter>
               <action android:name="android.intent.action.SEND" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="text/plain" />
            </intent-filter>
            <intent-filter>
               <action android:name="android.intent.action.VIEW" />
               <category android:name="android.intent.category.DEFAULT" />
               <category android:name="android.intent.category.BROWSABLE" />
               <data android:scheme="http|https" />
            </intent-filter>

んで、Helperの起動方法は①起動元と同じタスクと②起動元と別のタスクどっちが良いか分かりません。

なので、それぞれ作ってみました。


で、結果として①にしました。

②の方法だと2回目以降のクリップにHelperがうまく動いてくれませんでした。

finish()してるんですが、なぜかHelperの何もないActivityが表示されてしまう・・・。


onDestroy()しても同じでした。うーん、なんでだろう。




なので、①の方法で、具体的にはこんな流れでやってみます。


taptu⇒同じタスクでHelper起動⇒Helperから新規タスクでEverWebClipper起動⇒Helperはfinish()してtaptuを解放




Javaソースは、こんな感じ。



public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = this.getIntent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setClassName(" EverWebClipperのパッケージ", " EverWebClipperのアクティビティ");
this.startActivity(intent);
this.finish();
}

基本的には受信したインテントをそのまま横流しするだけですw

ただし、

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);

で、EverWebClipperの起動方法を変更しています。




最初はFLAG_ACTIVITY_NEW_TASKだけでいけるかと思ったんですけどダメでした。


2回目以降のWebクリップになると、既に起動したEverWebClipperが再表示されるだけ。


たぶん、別のタスクにあったら、それが再利用されるのかな?




じゃぁ、どうしよっかな~って思ってたんですが、


そう言えば、Intentのフラグって複数指定できなかったっけ?と調べてみました。




参考にしたページ
Intent | Android Developers
Activity遷移時のオプション

毎回、本家デベロッパーを読んでますが、英語が苦手なもので・・・。
日本語サイトもチェックしてます。

なんか、説明文を見る限りFLAG_ACTIVITY_CLEAR_TOPが使えそう。


新規タスクかつクリアしてから起動してくれそうな感じがしませんか?


で、やってみたところ、うまくいきました!

本当は全パターン試して動作の違いを試すべきなんだろうけど、

もう眠いし明日は新しい通ちゃん(F-10D)が来るので夜更かし出来んとです。



そんな訳で、インテントを右から左で受け流すけど、チョンッとつま先で向きかえるアプリでしたw

0 件のコメント:

コメントを投稿