以编程方式发送彩信

7
我希望您可以通过编程方式发送彩信,我使用了以下代码:
    Intent sendIntent1 = new Intent(Intent.ACTION_SEND); 
    try {

        sendIntent1.setType("text/x-vcard");
        sendIntent1.putExtra("address","0475223091");
        sendIntent1.putExtra("sms_body","hello..");
        sendIntent1.putExtra(Intent.EXTRA_STREAM,
                Uri.parse(vcfFile.toURL().toString()));
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    startActivity(sendIntent1);

问题是它会直接跳转到撰写短信页面,需要手动发送短信,但我不想这样,没有任何通知的情况下应该自动发送。我该怎么做?请有人分享答案。
3个回答

9

我最终找到了一个百分百有效的解决方案。请参考 Github 项目:https://github.com/klinker41/android-smsmms。(如果有人发现它有用,请捐赠给作者:http://forum.xda-developers.com/showthread.php?t=2222703)。

需要注意的是,必要的设置仅为:

Settings sendSettings = new Settings();

sendSettings.setMmsc(mmsc);
sendSettings.setProxy(proxy);
sendSettings.setPort(port);

您可以像以下代码一样获取它们(在Set APN programmatically on Android中找到,由vincent091回答):
Cursor cursor = null;
if (Utils.hasICS()){
    cursor =SqliteWrapper.query(activity, activity.getContentResolver(), 
            Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null);
} else {
    cursor = activity.getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"),
        null, null, null, null);
}

cursor.moveToLast();
String type = cursor.getString(cursor.getColumnIndex(Telephony.Carriers.TYPE));
String mmsc = cursor.getString(cursor.getColumnIndex(Telephony.Carriers.MMSC));
String proxy = cursor.getString(cursor.getColumnIndex(Telephony.Carriers.MMSPROXY));
String port = cursor.getString(cursor.getColumnIndex(Telephony.Carriers.MMSPORT));

我遇到了这个问题:java.lang.IllegalArgumentException: Null message URI。你能帮忙吗? - Aniket-Shinde
Utils.hasICS()是什么? - Qadir Hussain
还有,APN_PROJECTION是什么? - Qadir Hussain

2

MMS是Android中基于HTTP的请求。 发送MMS需要移动数据。 Android没有暴露API来发送MMS,因为他们已经有了SMS的API。 如果您想让应用程序发送MMS,您将不得不编写所有内容。 请参考AOSP代码。 https://github.com/android/platform_packages_apps_mms 或者您可以简单地构建Intent,然后启动本机短信应用程序。


0

通过这种方式,您可以直接发送彩信,只需提供手机号码和主题,并附加图像。

Uri uri = Uri.parse("file://"+Environment.getExternalStorageDirectory()+"/test.png");
        Intent i = new Intent(Intent.ACTION_SEND);
        i.putExtra("address","1234567890");
        i.putExtra("sms_body","This is the text mms");
        i.putExtra(Intent.EXTRA_STREAM,"file:/"+uri);
        i.setType("image/png");
        startActivity(i);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接