我想將一些彩信添加到我的設備數據庫中。Android將彩信添加到數據庫
我有下面的代碼,但它根本不起作用。沒有條目被添加到本機應用程序...
public static Uri insert(Context context, String[] to, String subject, Uri messageUri)
{
try
{
Uri destUri = Uri.parse("content://mms/sent");
// Get thread id
Set<String> recipients = new HashSet<String>();
recipients.addAll(Arrays.asList(to));
long thread_id = getOrCreateThreadId(context, recipients);
Log.e(">>>>>>>", "Thread ID is " + thread_id);
// Create a dummy sms
ContentValues dummyValues = new ContentValues();
dummyValues.put("thread_id", thread_id);
dummyValues.put("body", "Dummy SMS body.");
Uri dummySms = context.getContentResolver().insert(Uri.parse("content://sms/sent"), dummyValues);
// Create a new message entry
ContentValues mmsValues = new ContentValues();
mmsValues.put("thread_id", thread_id);
mmsValues.put("date", System.currentTimeMillis()/1000);
mmsValues.put("ct_t", "application/vnd.wap.multipart.related");
mmsValues.put("read", "1");
mmsValues.put("sub", subject);
// Create part
long dummyId = System.currentTimeMillis();
createPart(context, dummyId, imageBytes);
// Insert message
Uri res = context.getContentResolver().insert(destUri, mmsValues);
String messageId = res.getLastPathSegment().trim();
Log.e(">>>>>>>", "Message saved as " + res);
// Update part
ContentValues updateValues = new ContentValues();
updateValues.put("mid", messageId);
Uri updateUri = Uri.parse("content://mms/" + dummyId + "/part");
int mmsPartRows = context.getContentResolver().update(updateUri, updateValues, null, null);
Log.e(">>>>>>>", "Part rows " + mmsPartRows);
// Create addresses
for (String addr : to)
{
ContentValues addrValues = new ContentValues();
addrValues.put("address", addr);
addrValues.put("charset", "106");
addrValues.put("type", 151); // TO
Uri addrUri = Uri.parse("content://mms/"+ messageId +"/addr");
Uri mmsAddrUri = context.getContentResolver().insert(addrUri, addrValues);
Log.e(">>>>>>>", "Addr uri is " + mmsAddrUri.toString());
}
res = Uri.parse(destUri + "/" + messageId);
// Delete dummy sms
context.getContentResolver().delete(dummySms, null, null);
return res;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private static Uri createPart(Context context, long id, byte[] imageBytes) throws Exception
{
ContentValues mmsPartValue = new ContentValues();
mmsPartValue.put("ct", "image/png");
Uri partUri = Uri.parse("content://mms/" + id + "/part");
Uri res = context.getContentResolver().insert(partUri, mmsPartValue);
Log.e(">>>>>>>", "Part uri is " + res.toString());
// Add data to part
OutputStream os = context.getContentResolver().openOutputStream(res);
ByteArrayInputStream is = new ByteArrayInputStream(imageBytes);
byte[] buffer = new byte[256];
for (int len=0; (len=is.read(buffer)) != -1;)
{
os.write(buffer, 0, len);
}
os.close();
is.close();
return res;
}
private static long getOrCreateThreadId(Context context, String[] numbers)
{
HashSet<String> recipients = new HashSet<String>();
recipients.addAll(Arrays.asList(numbers));
return Telephony.Threads.getOrCreateThreadId(context, recipients);
}
context
是我的視圖上下文to
是包含地址的字符串數組(例如,新的String [] { 「0612345678」,「0623456789 「})subject
是我的彩信主題,如‘內經MyApp的’messageUri
發送是一種開放的指向我想我的SD卡上發送圖像。
我做錯了嗎?
getOrCreateThreadId(context,recipients)這個方法在哪裏? – 2013-04-08 06:27:05
爲什麼要發送Uri dummySms = context.getContentResolver()。insert(Uri.parse(「content:// sms/sent」),dummyValues); – 2013-04-09 05:12:06
顯然,在某些設備上(運行2.2-),如果還沒有與給定的聯繫人進行討論,則需要在數據庫中插入一個虛擬SMS,然後插入您的MMS,最後刪除虛擬短信。 – Manitoba 2013-04-09 07:55:53