本文介绍了Android的保存或编程方式插入的内容提供商MMS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想code如下所述,我从互联网上得到它。它插入行中正常,但彩信未显示本机应用信息内容提供商(mmssms.db)。
11的thread_id已经是present在我的内容提供商,所以我使用的thread_id 11。
公共静态乌里插入(上下文的背景下,字符串,字符串主题,字节[] imageBytes)
{
尝试
{
乌里destUri = Uri.parse(内容:// MMS); //获取线程ID
//设置<串GT;收件人=新的HashSet<串GT;();
//recipients.addAll(Arrays.asList(to));
长的thread_id = getOrCreateThreadId(背景下,);
Log.e(>>>>>>>中,线程ID为+的thread_id); //创建一个虚拟的短信
ContentValues dummyValues =新ContentValues();
dummyValues.put(thread_id单的thread_id);
dummyValues.put(身体,虚拟短信的身体。);
。乌里dummySms = context.getContentResolver()插入(Uri.parse(内容://短信/),dummyValues); //创建一个新的消息条目
长今= System.currentTimeMillis的();
ContentValues mmsValues =新ContentValues();
mmsValues.put(thread_id单的thread_id);
mmsValues.put(日期,现在/ 1000L);
mmsValues.put(msg_box,Mms.MESSAGE_BOX_OUTBOX);
//mmsValues.put(\"m_id,返回System.currentTimeMillis());
mmsValues.put(读,1);
mmsValues.put(亚健康,一级学科);
mmsValues.put(sub_cs,106);
mmsValues.put(ct_t,应用程序/ vnd.wap.multipart.related);
mmsValues.put(EXP,imageBytes.length);
mmsValues.put(m_cls,个人);
mmsValues.put(m_type,128); // 132(检索CONF)130(NOTIF IND)128(SEND REQ)
mmsValues.put(V,19);
mmsValues.put(PRI,129);
mmsValues.put(tr_id,T+ Long.toHexString(现在));
mmsValues.put(resp_st,128); //插入消息
乌里解析度= context.getContentResolver()插入(destUri,mmsValues)。
字符串MESSAGEID = res.getLastPathSegment()修剪()。
Log.e(>>>>>>>中,信息保存为+ RES); //创建部分
createPart(背景下,MESSAGEID,imageBytes);
createAddr(背景下,MESSAGEID,至);
//解析度= Uri.parse(destUri +/+ MESSAGEID); //删除假短信
。context.getContentResolver()删除(dummySms,NULL,NULL); 返回水库;
}
赶上(例外五)
{
e.printStackTrace();
} 返回null;
}私有静态乌里createPart(上下文的背景下,字符型,字节[] imageBytes)抛出异常
{
ContentValues mmsPartValue =新ContentValues();
mmsPartValue.put(中间,ID);
mmsPartValue.put(CT,图像/ PNG);
mmsPartValue.put(CID,&下;+ System.currentTimeMillis的()+>中);
乌里partUri = Uri.parse(内容:// MMS /+身份证+/部分);
乌里解析度= context.getContentResolver()插入(partUri,mmsPartValue)。
Log.e(>>>>>>>中,部分URI为+ res.toString()); //数据添加到部分
OutputStream的OS = context.getContentResolver()openOutputStream(RES)。
ByteArrayInputStream的是=新ByteArrayInputStream进行(imageBytes);
字节[]缓冲区=新的字节[256];
对(INT LEN = 0;(LEN = is.read(缓冲液))= -1;!)
{
os.write(缓冲液,0,LEN);
}
os.close();
is.close(); 返回水库;
}私有静态乌里createAddr(上下文的背景下,ID字符串,字符串地址)抛出异常
{
ContentValues addrValues =新ContentValues();
addrValues.put(地址,地址);
addrValues.put(字符集,106);
addrValues.put(式,151); // 至
乌里addrUri = Uri.parse(内容:// MMS /+身份证+/地址);
乌里解析度= context.getContentResolver()插入(addrUri,addrValues)。
Log.e(>>>>>>>中,地址URI为+ res.toString()); 返回水库;
}
@燮pressLint(NewApi)
私有静态长getOrCreateThreadId(上下文的背景下,字符串收件人)抛出异常
{ 返回11;
}
解决方案
在Android 4.4系统只默认邮件应用程序可以写短信和彩信内容的解析器,所以也许你试过在设备与Android 4.4或以上
的
I am trying code described below, I got it from internet. It inserts rows in content provider(mmssms.db) properly but MMS is not shown Native Messaging App.
thread_id 11 is already present in my content provider so I am using thread_id 11.
public static Uri insert(Context context, String to, String subject, byte[] imageBytes)
{
try
{
Uri destUri = Uri.parse("content://mms");
// Get thread id
//Set<String> recipients = new HashSet<String>();
//recipients.addAll(Arrays.asList(to));
long thread_id = getOrCreateThreadId(context, to);
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/"), dummyValues);
// Create a new message entry
long now = System.currentTimeMillis();
ContentValues mmsValues = new ContentValues();
mmsValues.put("thread_id", thread_id);
mmsValues.put("date", now/1000L);
mmsValues.put("msg_box", Mms.MESSAGE_BOX_OUTBOX);
//mmsValues.put("m_id", System.currentTimeMillis());
mmsValues.put("read", 1);
mmsValues.put("sub", subject);
mmsValues.put("sub_cs", 106);
mmsValues.put("ct_t", "application/vnd.wap.multipart.related");
mmsValues.put("exp", imageBytes.length);
mmsValues.put("m_cls", "personal");
mmsValues.put("m_type", 128); // 132 (RETRIEVE CONF) 130 (NOTIF IND) 128 (SEND REQ)
mmsValues.put("v", 19);
mmsValues.put("pri", 129);
mmsValues.put("tr_id", "T"+ Long.toHexString(now));
mmsValues.put("resp_st", 128);
// Insert message
Uri res = context.getContentResolver().insert(destUri, mmsValues);
String messageId = res.getLastPathSegment().trim();
Log.e(">>>>>>>", "Message saved as " + res);
// Create part
createPart(context, messageId, imageBytes);
createAddr(context, messageId, to);
//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, String id, byte[] imageBytes) throws Exception
{
ContentValues mmsPartValue = new ContentValues();
mmsPartValue.put("mid", id);
mmsPartValue.put("ct", "image/png");
mmsPartValue.put("cid", "<" + System.currentTimeMillis() + ">");
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 Uri createAddr(Context context, String id, String addr) throws Exception
{
ContentValues addrValues = new ContentValues();
addrValues.put("address", addr);
addrValues.put("charset", "106");
addrValues.put("type", 151); // TO
Uri addrUri = Uri.parse("content://mms/"+ id +"/addr");
Uri res = context.getContentResolver().insert(addrUri, addrValues);
Log.e(">>>>>>>", "Addr uri is " + res.toString());
return res;
}
@SuppressLint("NewApi")
private static long getOrCreateThreadId(Context context, String recipients) throws Exception
{
return 11;
}
解决方案
On Android 4.4 only default message app can write to sms and mms content resolvers, so maybe you tried on device with Android 4.4 or olderhttp://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
这篇关于Android的保存或编程方式插入的内容提供商MMS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!