我试图仅从我的应用程序发送mms。我在Android开发人员教程(http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html)的帮助下制作了默认消息传递应用程序。
我的清单:
侦听传入SMS消息的BroadcastReceiver:
<receiver android:name="com.test.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
侦听传入彩信的BroadcastReceiver
<receiver android:name="com.test.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
通过手机快速响应发送消息的服务
<service android:name="com.test.HeadlessSmsSendService"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
NewMmsActivity 允许用户发送新短信/彩信的活动:
<activity android:name="com.test.NewMmsActivity"
android:configChanges="keyboard|keyboardHidden|locale|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
但是,当我尝试使用 NewMmsActivity 发送一个mms时,它不起作用,而对话框是这样打开的:
CODE:
Intent mmsIntent = new Intent(Intent.ACTION_SEND);
mmsIntent.putExtra("sms_body", "text");
mmsIntent.putExtra("address", "99999999");
mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(fileString)));
mmsIntent.setType("image/jpeg");
startActivity(mmsIntent);
如果我使用Intent.ACTION_SENDTO没有任何反应。意图启动没有任何问题,但没有任何事情发生。
我错过了什么?任何想法将不胜感激!
答案 0 :(得分:1)
作为默认应用,您的自己负责发送彩信,而不是打开其他应用,这就是您的代码所做的事情。目前,Android没有简单的MMS API,就像SMS一样。此外,它是框架的一个非常缺乏文档的方面,实现它所需的代码和解释量超出了Stack Overflow的范围。欢迎您查看本机应用程序的源代码以获取指导,但请记住,这不是一项简单的任务,因为默认应用程序负责处理MMS所需的一切,包括发送,接收和内容提供商交易。
答案 1 :(得分:0)
我认为问题在于您尝试发送图像和文本数据,但您的类型设置为图像。 请尝试将其切换为:
mmsIntent.setType("*/*");
答案 2 :(得分:0)
我发现发送mms的最简单的方法是在这里找到的android-smsmms库:https://github.com/klinker41/android-smsmms
用于获取mmsc,代理和端口我使用:
final Cursor apnCursor = SqliteWrapper.query(mContext, this.mContext.getContentResolver(),
Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null);
String type = null;
if (apnCursor.moveToFirst()) {
do {
type = apnCursor.getString(3);
if(type.equals("default,supl,mms") ||
type.equals("mms")) {
mmsc = apnCursor.getString(0);
proxy = apnCursor.getString(1);
port = apnCursor.getString(2);
}while (apnCursor.moveToNext());
在if循环中,我正在检查APN是否有我需要的MMS数据,否则转到下一个。