2012年4月18日水曜日

Gmail の intent 取得と端末の断片化

Liveviewで、poor Gmail Notifier をマーケットにリリースしたのが、2011年の8月、今月 SmartWatchの Gmail Notifier - Smart Extras™ も無事リリースとなりましたが、Gmail Notifier - Smart Extras™ をリリースして衝撃の事実。

なんと、元々Gmailのintentを拾う部分の作りは同じなのですが、Xperia arc ではintentを拾えていないことがわかりました。
poor Gmail Notifier リリースからずっとです。
また、x10miniなどのAndroid2.1端末も拾えてなかったようです。

とくに arcは衝撃的でした。
そんな変な端末だとは思っていなかったのですが。。。。。。

結論から行くと下記のようにReceiverを仕掛けておけば、Gmailのintentはもれなく拾えていそうです。(今のところ私の知る限り。



<receiver android:name=".GmailReceiver" android:label="receiver">
            <intent-filter>
                <action android:name="android.intent.action.PROVIDER_CHANGED" />
                <data android:scheme="content"
                    android:host="gmail-ls"
                    android:pathPrefix="/unread/^i"
                />
            </intent-filter>              
            <intent-filter>
                <action android:name="android.intent.action.PROVIDER_CHANGED" />
                <data android:scheme="content"
                    android:host="gmail-ls"
                    android:pathPrefix="/unread/^i"
                    android:mimeType="*/*"
                />
            </intent-filter>                      
            <intent-filter>
                <action android:name="android.intent.action.PROVIDER_CHANGED" />
                <data android:scheme="content" android:host="gmail-ls"
                    android:path="/unread/^iim" />
            </intent-filter>         
        </receiver>
古いAndroid端末は、mimeType付きのintentが飛んでるのはぐぐると出てきます。
また、path に関して /unread/^i と /unread/^iim の2種類が飛んでるのもググると出てきます。

ですが、arc はまさかの /unread/^iim のみなのでした。

通常Android2.3ですと、 /unread/^i が出てるはずなので、ずっとこれを拾っていました。
mimeType はずっと気付かないでいましたが、まぁこれは古いAndroid(2.1?)の話しなのでよしとします。
実際、HTC DesireHD をメインで開発していたのですが、/unread/^i で拾えます。
GalaxyNexusも拾えます。また、ユーザさんとやり取りした感触だと、arc以外の Xperia の皆さんも拾えていそうです。
なぜか、arc だけ /unread/^i は出ず、 /unread/^iim のみ出るようです。
(もしかしたらacroもなのかな???)

で、そんなこんながわかりましたので、全部拾ってみました。
すると、今度は通常  /unread/^i  /unread/^iim  両方でてるので、2重に通知してしまう問題が勃発。(arc は^iim だけなので1回の通知になったのでしょうけれども。。。)

^i が拾えた端末では、 ^iim の通知は無視をするロジックをいれて、現在に至ります。

if ("^^unseen-^i".equals(extras.getString("tagLabel"))){  
Editor e = mSharedPreferences.edit();
e.putBoolean("tagLabel", true);
e.commit();
Log.d("tagLabel ^i isTrue ");
}
if (mSharedPreferences.getBoolean("tagLabel", false)
&& "^^unseen-^iim".equals(extras.getString("tagLabel"))) {
Log.d("tagLabel ^iim && ^i isTrue ");return; // }
こんな感じ。。。。

断片化たまらんわ、と言うお話でした。


0 件のコメント:

コメントを投稿