我正在使用类似于另一个SO帖子的代码.但我的每个MMS的MIME类型都是"application/smil".如何确定MMS是否包含图片,音频,文本等?
这是我目前使用的代码:
String selectionPart = "mid =" + id;
Uri ur = Uri.parse("content://mms/part");
Cursor cur = getContentResolver().query(ur, null, selectionPart, null, null);
if (cur.moveToFirst()) {
do {
String[] values = new String[cur.getColumnCount()];
for (int i = 0; i < cur.getColumnCount(); i++) {
values[i] = cur.getString(i);
}
String partId = cur.getString(cur.getColumnIndex("_id"));
String type = cur.getString(cur.getColumnIndex("ct"));
Run Code Online (Sandbox Code Playgroud)
这是音频MMS的值String []中包含的内容:
[56, 98, -1, application/smil, smil.xml, null, null, null, <0000>, smil.xml, null, null, null, <smil>
<smil>
<head>
<layout>
<root-layout height="480px" width="320px"/>
<region fit="meet" height="160px" …Run Code Online (Sandbox Code Playgroud) 是否可以备份消息(SMS,MMS,电子邮件)和文件(内部和外部内存),然后使用相同的应用程序还原它,而无需root /越狱设备?无论可能与否,我会考虑采用什么方法?[请支持SSCCE,谢谢]
我认为Android 2.2(Froyo)是我的基础平台.
更新:2013年1月30日
更新我的问题
我正在尝试查询SMS线程表,但我似乎没有使用正确的URI.
查询URI"content:// sms/conversations"为我提供了以下列:
[thread_id,msg_count,snippet]
查询URI"content:// mms-sms/conversations"为我提供了以下列:
[body,person,sub,subject,retr_st,type,date,ct_cls,sub_cs,_id,read,ct_l,tr_id,st,msg_box,thread_id,reply_path_present,m_cls,read_status,ct_t,status,retr_txt_cs,d_rpt,error_code,m_id ,m_type,v,exp,pri,service_center,address,rr,rpt_a,resp_txt,locked,resp_st,m_size]
我正在寻找从android/provider/Telephony.java中的Threads表中提供值的URI - data,recipient_ids,message_count,read等等...
谢谢
我正在一个根深蒂固的 Android 2.3.3 htc 令人难以置信的 S 上编写一个 MMS/SMS 应用程序,带有 2.1。现在,在尝试接收短信/彩信的某个联系人列表时,我在查询中得到了一个 FC。
这是一些代码:
Uri uri = Uri.parse("content://mms-sms/conversations/"+String.valueOf(thread_id));
ContentResolver cr = context.getContentResolver();
Cursor c= cr.query(uri,null,null,null,null); //crashing here
Run Code Online (Sandbox Code Playgroud)
日志猫:
05-22 15:24:24.273: E/AndroidRuntime(32087): FATAL EXCEPTION: main
05-22 15:24:24.273: E/AndroidRuntime(32087): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.uiu.messaging/com.uiu.messaging.ContactMessageChain}: java.lang.NullPointerException
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.os.Handler.dispatchMessage(Handler.java:99)
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.os.Looper.loop(Looper.java:143)
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.main(ActivityThread.java:4196)
05-22 15:24:24.273: E/AndroidRuntime(32087): …Run Code Online (Sandbox Code Playgroud) 此问题已多次报告,但仍未解决.我在三星的开发者网站或StackOverflow中阅读了与该主题有关的所有消息/帖子
让我再说几句话来描述整个问题:
开发人员过去通过简单查询获取SMS对话列表,例如:
Uri.parse("content://mms-sms/conversations/");
Cursor cursor = context.getApplicationContext().getContentResolver().query(uri, null, null, null, null);
或类似的东西.关键点这里的URI地址:content://mms-sms/conversations
每个人都知道这是非官方的,而且他自己承担风险 - 请参见此处的证据链接
但是,关键点这里有一个简单的事实,这个代码只能在三星Galaxy S3和Galaxy Tab 2的某些型号中正常工作.它NullPointerException使用stacktrace 生成:
java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1431)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
at android.content.ContentResolver.query(ContentResolver.java:372)
at android.content.ContentResolver.query(ContentResolver.java:315)
在世界/宇宙其他地方的所有其他设备中,它运作良好!奇怪,是吧?
我知道这样的答案:嘿伙计,这是你的问题,因为前面提到的URI的存在/正确性不能保证,但是,有人有更有成效的想法吗?
我已经通过他们的论坛向三星的开发者发布了问题.
我正在实现这里讨论的方法:如何在Android中读取MMS数据?
我正在尝试将短信和彩信读入单个列表视图.我做得很好,但是当我尝试排序时,我将所有的SMS整理在一起,然后将所有的MMS整理在一起.
这是我的代码:
Cursor smsCursor = getContentResolver().query(Uri.parse("content://mms-sms/conversations/"), null, null, null, "date DESC");
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何结合这两个来源或如何将MMS结合到内置Android应用程序的短信对话中吗?
编辑:我注意到SMS的日期比MMS的日期多几位.
编辑2:像这样添加"julianday()":
Cursor smsCursor = getContentResolver().query(Uri.parse("content://mms-sms/conversations/"), null, null, null, "julianday(date) DESC");
Run Code Online (Sandbox Code Playgroud)
使MMS显示在列表的顶部.
首先,我发现这个答案特别有用.然而,它让我想知道如何找到这样的信息.
我似乎无法弄清楚如何迭代收件箱中的所有邮件.我目前使用的解决方案Uri.parse("content://mms-sms/conversations")是使用"_id"和"ct_t".然而,似乎我只能在手机中找到三个对话,尽管有30个ms(其中20个在保存对话线程中,其他对话分为两个其他对话).对这样的陈述有意义content://mms-sms/conversations.但是,其他提供商似乎只处理短信或彩信.有没有办法以这种方式迭代整个消息列表,我"content://mms-sms/conversations"用其他东西替换?
public boolean refresh() {
final String[] proj = new String[]{"_id","ct_t"};
cursor = cr.query(Uri.parse("content://mms-sms/conversations"),proj,null,null,null);
if(!(cursor.moveToFirst())) {
empty = true;
cursor.close();
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我用下一个函数迭代消息
public boolean next() {
if(empty) {
cursor.close();
return false;
}
msgCnt = msgCnt + 1;
Msg msg;
String msgData = cursor.getString(cursor.getColumnIndex("ct_t"));
if("application/cnd.wap.multipart.related".equals(msgData)) {
msg = ParseMMS(cursor.getString(cursor.getColumnIndex("_id")));
} else {
msg = ParseSMS(cursor.getString(cursor.getColumnIndex("_id")));
}
if(!(cursor.moveToNext())) {
empty = true;
cursor.close();
return false;
}
return true; …Run Code Online (Sandbox Code Playgroud) 我开始开发一个必须与MMS附件进行交互的android应用,尤其是获取附件(例如文本,位图,音频,视频等)并将其存储在手机上的特定文件夹中。
因此,我开始在网络上阅读一些书籍和一些帖子,但这并不是一个很普遍的论点,而且我也没有找到一种正式的方式来做自己想做的事情。
我在这里找到有关堆栈溢出的相当不错的文章:如何在Android中读取MMS数据?...对我来说效果很好,但是有两个问题:
我对没有官方教程或“操作方法”对此感到非常失望,因为SMS和MMS管理是移动开发中非常普遍的需求。我希望有一个人可以帮助我....
提前致谢!!
所以我遇到了三类彩信类型:
Plain Text - "text/plain"
Image - "image/jpeg", "image/bmp", "image/gif", "image/jpg", "image/png"
SMIL (Synchronized Multimedia Integration Language) - "application/smil"
所以我在获取属于前两类的 MMS 中的数据时没有问题。但是我无法从消息类型的 MMS 中获取数据 application/smil
下面我列出application/smil了我从手机中提取的5 个不同的彩信示例。
[31, 22, -1, application/smil, 123_1.smil, 106, null, null, <0000>, 0.smil, null, null, null, <smil>
<head>
<layout>
<root-layout height="160" width="240"/>
<region fit="meet" height="67%" id="Image" left="0%" top="0%" width="100%"/>
<region fit="meet" height="33%" id="Text" left="0%" top="67%" width="100%"/>
</layout>
</head>
<body>
<par dur="8000ms">
<img region="Image" src="cid:992"/>
</par>
<par dur="8000ms">
<img region="Image" src="cid:993"/>
</par>
</body>
</smil>]
Run Code Online (Sandbox Code Playgroud)
. …
我确实从该链接获得了有关如何检索mms的文本和图像的信息:如何在Android中读取MMS数据?。
但是我不确定如何检索发送的彩信的日期。
我知道我必须研究content:// mms而不是content:// mms / part。
这是检索mms文本的方法:
private String getMmsText(String id) {
Uri partURI = Uri.parse("content://mms/part/" + id);
InputStream is = null;
StringBuilder sb = new StringBuilder();
try {
is = getContentResolver().openInputStream(partURI);
if (is != null) {
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String temp = reader.readLine();
while (temp != null) {
sb.append(temp);
temp = reader.readLine();
}
}
} catch (IOException e) {
} finally {
if (is != null) {
try …Run Code Online (Sandbox Code Playgroud)