在android 4.4中发送mms

时间:2014-09-23 14:19:46

标签: android telephony mms

我试图仅从我的应用程序发送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时,它不起作用,而对话框是这样打开的:

enter image description here

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没有任何反应。意图启动没有任何问题,但没有任何事情发生。

我错过了什么?任何想法将不胜感激!

3 个答案:

答案 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数据,否则转到下一个。