android - Android 发送彩信不起作用
问题描述
我的代码有什么问题?我尽量做到简单。
public static void sendMMS(final Context context, String phoneNumber, String messageText) throws Exception {
final String fileName = "send." + String.valueOf(Math.abs(new Random().nextLong())) + ".dat";
File mSendFile = new File(context.getCacheDir(), fileName);
final byte[] pdu = MmsMessagingDemo.buildPdu(context, phoneNumber, "hello", messageText);
FileOutputStream writer = null;
try {
writer = new FileOutputStream(mSendFile);
writer.write(pdu);
}
finally {
if (writer != null) {
writer.close();
}
}
Uri writerUri = (new Uri.Builder())
.authority("com.example.android.apis.os.MmsFileProvider")
.path(fileName)
.scheme(ContentResolver.SCHEME_CONTENT)
.build();
SmsManager sms = SmsManager.getDefault();
sms.sendMultimediaMessage(context, writerUri, null, null, null);
}
这个在 AsyncTask 中调用的方法我使应用程序默认为 smsApp
public void makeDefautSmsApp() {
final String myPackageName = getPackageName();
if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName);
startActivity(intent);
}
}
我尽我所能
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS, Manifest.permission.READ_SMS, Manifest.permission.READ_PHONE_NUMBERS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
并在清单中
<manifest package="com.example.sendsms"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- SMS -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
但我没有错误,但我的消息没有发送 MMSManager.sendMMS(MainActivity.this, "+33628xxxxxx", "helloWorld");
也许有人有想法?
解决方案
我解决了我的问题,因为我将彩信打磨到打磨它的同一部手机上。它适用于短信,但看起来不适用于彩信。
但是,如果我将彩信发送到另一部手机,那就可以了
推荐阅读
- angular - Angular - 选中/取消选中所有复选框
- oracle - 将数据从 HDFS 导出到 oracle 时,sqoop 无法将 long 转换为时间戳
- pytorch - 如何运行 Tensorboard 创建的事件
- python - 如何使用排序函数 discord.py?
- python - 无法理解 Python3 enumerate()
- javascript - 如何自定义 webpack 将 .vues 文件编译为 .js 文件的过程?
- asp.net - 服务器响应标头中的 ASP .NET 2.0.50727。如何确定是 EOL?
- spring-boot - 如何让 VS Code 识别嵌套的 gradle 项目?
- python - 获取字典列表平均值的最佳方法
- deployment - 使用 Rabbit 进行部署处理