2011年5月31日火曜日

Softbankメールインストール端末でSMSの通知 その2

結局前回のごにょごにょから、未取得のメッセージ に関してはなにもできずですが、とりあえず現状の物をマーケットに公開しています。

今回ポイントとなったのは、
  1. Softbankメールの intent-filter の Priority が 500 になっている ⇒ 当アプリでは1000に設定してSoftbankメールより先にブロードキャストを取得する。 
  2. content://mms から取得するsubjectはISO8859_1"でデコードする 
くらいでしょうか。。。。

当方の環境の都合でSMSのみテストしています。(もしくはメーッセージアプリのMMS着信)
S!メールの着信時の動作は想像で作成していますので、動作報告などいただけるとありがたいです。

アプリは、こちらからどうぞ
https://market.android.com/details?id=jp.ddo.dekuyou.liveview.plugins.smail

2011年5月27日金曜日

Softbankメールインストール端末でSMSの通知

Softbankメールインストール端末でSMSの通知は、S!メール優先設定をしていると、ブロードキャストをSoftbankメールアプリにabortbroadcast()されてしまって、Liveviewは反応できません(LiveviewどころかすべてのSMSアプリが反応できない)

すでに、巡回式でSoftbankメールインストール端末でのSMS通知アプリはありますが、あくまでブロードキャストでの通知アプリをつくってみたいと思います。
(そういや今までSandbox型のアプリしかつくってなかったし。。。TwitTLもLiveFBviewもSendSMSも・・・・通知が目玉のガジェットなのにね)



と、言うわけで、ごにょごにょとブロードキャストレシーバを用意して、Softbankメールよりも先にブロードキャストを取得して。。。

SMSの通知できたぞと。よしよし。。。。。。


とやっていて気づいたのですが、「未取得のメール」などMMSを自動取得しないパターン。
「未取得」の状態で通知バーに通知でてるんですが、この時になにかブロードキャストがあるのかと思いきや、今のところ拾えるのかわかりません。

あと、私の環境では、SoftbankメールでMMSが取得できない(APNがごにょごにょなので)ので、MMS受信時の挙動を確かめることができません。。。

うーん。未取得だけでも通知できたらなぁ。。。。。

無念。

その他にも、onStart() が一度もLiveviewに呼ばれる前に、ブロードキャストを受信してしまった場合、mLiveViewAdapter がまだ設定されていなくて、落ちるなんて問題もあります。
Liveviewに呼ばれて以降、もしくは一度落ちて以降はmLiveViewAdapter に値が入っているようで、なんとなく動きます。

うーん。うーん。

やはり無念です。

2011年5月12日木曜日

SMSのQuick Reply ⇒ 「SendSMS Plugin For Liveview」 作りました。

サラッと、作ってみました。
割り切り仕様で、受信した最後のSMSの送信者に対して、メッセージを選択して送信します。

マーケットで公開中 ⇒ http://goo.gl/kkJRZ


SMSの送信部分は事前に調査していた通り

SmsManager smsManager = SmsManager.getDefault();
smsManager
.sendTextMessage(
phoneNo,
null,
message, null, null);
で簡単にとんで行ったのですが、このままだと送信の記録が残ってませんでした。


ContentValues values = new ContentValues();
values.put("address", phoneNo);
values.put("body", message);
getContentResolver().insert(Uri.parse("content://sms/sent"), values);


 としておかないといけないんですね。

2011年5月11日水曜日

SMSのQuick Reply が欲しくなりました。

SMSのQuick Reply が欲しくなりました。
母艦を見れない時でも、通知を確認できるのが便利なLiveviewですが、確認したから一言返信したいって場合に返信できない状況(母艦は触れない)だと、非常にもどかしい。

こうなったらアプリ作るしかないなと言う事で調査開始。
とりあえず、SMSの対象者一覧を取得してみました。


Uri uriSms = Uri.parse("content://sms/inbox");
String columns[] = new String[] { "distinct address" };
Cursor c = getContentResolver()
.query(uriSms, columns, null, null, null);
c.moveToFirst();
CharSequence[] list = new CharSequence[c.getCount()];
String result = "";
for (int i = 0; i < list.length; i++) {
String[] proj = new String[] { Phone._ID, Phone.DISPLAY_NAME,
Phone.NUMBER };
Uri _uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI,
Uri.encode(c.getString(0)));
Cursor _cursor = managedQuery(_uri, proj, null, null, null);
if (_cursor.getCount() > 0) {
_cursor.moveToFirst();
result += _cursor.getString(0) + ":" + _cursor.getString(1)
+ ":" + c.getString(0) + "\n" ;
}else{
result += c.getString(0) + "\n" ;
}
_cursor.close();
c.moveToNext();
}
c.close();
こんな感じで取得できるようなので、あとは対象選んで定型句選んで送信ですね。

しかし、
String columns[] = new String[] { "distinct address" };

こんなんアリかよって感じですね。。。。。

2011年5月3日火曜日

LiveViewアプリを事あるごとに起動させて、切断しても再接続する可能性を上げる

LiveViewは、LiveViewアプリが起動していないことにはペアリングされても、アプリとして接続されません。
しかし、普通のServiceアプリであるLiveViewアプリは端末の状態によっては、ちゃんと動作していない状態になるようです。
これを、起動させるアプリとしてLiveWareマネージャがあるのですが、これはあまり仕事をしてくれているようでは無いです。

そこで、AutomateItを利用して事あるごとにLiveViewアプリを起動させるようにします。(xdaにやればちょっとは幸せになれるかもみたいなことが書いてあったので。)
しかし、それだとLiveViewアプリがいきなりフォアグラウンドになって欝陶しいです。




















しかし、よくよく考えるとLiveWareマネージャから起動されるLiveViewアプリは一瞬画面が切り替わりますがすぐに消えます。
これは、きっとINTENTの発行先が違うのだろうと思って、調べてみると「com.sonyericsson.extras.liveview.settings.BootLauncher」にIntent発行している模様。

AutomateIt は、アプリケーションの通常起動しか指定できないので、上記BootLauncherを呼ぶことができません。
そこで、
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Log.d(this.getClass().getName(),"LiveViewHelper Main!");
// パッケージ名, クラス名をセット
Intent intent = new Intent();
intent.setAction("android.intent.action.MAIN");
intent.setFlags(0x10000000);
intent.setClassName("com.sonyericsson.extras.liveview",
"com.sonyericsson.extras.liveview.settings.BootLauncher");
// アプリを起動
this.startActivity(intent);
// 自身の終了
finish();
}
な、中身のアプリを用意。AutomateItからこのアプリ(LiveViewHelper)を介して、「com.sonyericsson.extras.liveview.settings.BootLauncher」を呼び出すようにしてみました。

AutomateIt の設定はこんな感じ


効果はどのくらいあるか定かではありませんが、とりあえずコレで様子見です。


----
2011/12/11
LiveViewHelper.apk