に発信MMSのアドレスを取得することができ、私は& SMSを監視し、バックアップの着信MMSする放送受信機を持っている運はどのように私はアンドロイド
とグーグルの異なるものと多くを試して5日間費やしてきました。 sms - 発信と着信は問題ありません。しかし、MMS ...
私は着信MMS用の放送受信機を持っていますが、問題はありません。発信MMS用
しかし、私はコンテンツに向けたコンテンツオブザーバを使用:// MMSは
HERESに一部はこれが中のonchange一部であるサービスクラスから
mo = new MMSObserver(new Handler(),getApplicationContext());
try{
getContentResolver().unregisterContentObserver(mo);
}
finally{
getContentResolver().registerContentObserver(Uri.parse("content://mms"), true, mo);
}
をコンテンツオブザーバを登録上記のコンテンツオブザーバ
public void onChange(boolean bSelfChange)
{
super.onChange(bSelfChange);
Log.i(TAG,"MMSObserver onChange");
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Uri.parse("content://mms");
Cursor cur = contentResolver.quert("content://mms",null,null,null,null)
if(cur.moveToNext()){
String id = cur.getString(cur.getColumnIndex("_id"));
String date = cur.getString (cur.getColumnIndex ("date"));
String address = getAddress(id);
}
}
private static String getAddress(String id){
String selectionAdd = new String("msg_id=" + id);
String uriStr = MessageFormat.format("content://mms/{0}/addr", id);
Uri uriAddress = Uri.parse(uriStr);
Cursor cAdd = context.getContentResolver().query(uriAddress, null,
selectionAdd, null, null);
String name = null;
if (cAdd.moveToFirst()) {
do {
String number = cAdd.getString(cAdd.getColumnIndex("address"));
if (number != null) {
try {
Long.parseLong(number.replace("-", ""));
name = number;
} catch (NumberFormatException nfe) {
if (name == null) {
name = number;
}
}
}
} while (cAdd.moveToNext());
}
if (cAdd != null) {
cAdd.close();
}
return name;
}
問題は、アドレス列は常に発信用の「挿入アドレストークン」を返すことです。 ミリ秒単位の数値を得る方法はありますか?
また、メッセージが送信または保留中でない場合に、メッセージがドラフト形式であるときに、コンテンツオブザーバが起動されることに気付きました。なぜなら、彼らはsdkの一部ではないので、これらのurisに依存するのは一般的に悪い考えですから、私は別の方法に切り替えました。すべてのsms & mmsメッセージをカタログ化し、その_id列を格納し、それらをバックアップと同期させるだけです。しかし、私の問題はまだ残っています。
MMSアドレスの欄には、常に「挿入アドレス・トークン」を
任意の提案ですか?
'insert-address-token'の' type'値は '137'でなければなりませんが、実際の' address'値を含む型 '151'を伴わなければなりません。一行しか得られないのですか? – Jens