私は5日間、さまざまなことやたくさんのグーグルを試してみましたが、運がありませんでした
着信mmsとsmsを監視およびバックアップするためのブロードキャストレシーバーがあります。SMS-発信と着信は簡単です問題ありません。MMSしかし...
着信MMS用のブロードキャストレシーバーがありますが、問題ありません。
ただし、発信MMSの場合、content://mmsに向けられたコンテンツオブザーバーを使用します。
ここに、サービスクラスからコンテンツオブザーバーを登録する部分があります
mo = new MMSObserver(new Handler(),getApplicationContext());
try{
getContentResolver().unregisterContentObserver(mo);
}
finally{
getContentResolver().registerContentObserver(Uri.parse("content://mms"), true, mo);
}
これは、上記のコンテンツオブザーバーのonchange部分です。
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;
}
問題は、アドレス列が送信mmに対して常に「insert-address-token」を返すことです。mmsが行く数を取得するための可能な方法はありますか?
また、メッセージが送信または保留中であるときではなく、メッセージがドラフト形式であるときにコンテンツオブザーバーがトリガーされることに気付きました。それらのURIに依存することは、SDKの一部ではないため、一般的に悪い考えであるため、別の方法に切り替えました。すべてのsmsおよびmmsメッセージをカタログ化し、それらの_id列を保存し、それらをバックアップと同期するだけです。しかし、私の問題はまだ残っています。
MMSアドレス列は常に「insert-address-token」です
助言がありますか?