【问题标题】:Send SMS won't startActivity发送短信不会启动Activity
【发布时间】:2017-05-21 22:35:26
【问题描述】:

我想从我的应用程序中发送 SMS,为此我编写了下面的代码,这非常简单。但我面临的问题是,发送消息时未启动任何活动

发送消息的方法:

private void sendSMS(Context context, String phone, String msg){
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);

    smsIntent.setData(Uri.parse("smsto:"));
    smsIntent.putExtra("address", phone);
    smsIntent.putExtra("sms_body", msg);
    smsIntent.setType("vnd.android-dir/mms-sms");

    try {
        startActivity(smsIntent);
        finish();
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(context, "SMS faild, please try again later.", Toast.LENGTH_SHORT).show();
    }
}

清单中添加的权限

<uses-permission android:name="android.permission.SEND_SMS" />

它总是显示用 catch() 写的 toast

【问题讨论】:

  • 您是在棉花糖还是更高版本上进行测试?

标签: android android-mms android-sms


【解决方案1】:

试试这个:

也不需要:

&lt;uses-permission android:name="android.permission.SEND_SMS" /&gt;

只需使用此代码:

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
                sendIntent.setData(Uri.parse("sms:"));
                sendIntent.putExtra("sms_body", "Check out My app for your smartphone. Download it today from https://google.com");
                try {
                    startActivity(sendIntent);
                } catch (ActivityNotFoundException e) {
                    e.printStackTrace();                        
                }

【讨论】:

  • 谢谢。你的代码行 sendIntent.setData(Uri.parse("sms:"));帮了我。我正在做“smsto:”,形成我正在遵循的示例,这破坏了系统
【解决方案2】:

您正在执行的代码是旧的。 这是从您的APP发送短信的代码

public void sendSMSFunction(){
     SmsManager smsManager = SmsManager.getDefault();
     String messageContent = "Your Content";
     smsManager.sendTextMessage("Destination_PhoneNumber", null, messageContent, null, null);
}

并将此权限添加到您的清单文件中

<uses-permission android:name="android.permission.SEND_SMS"/>

如果您在 Android Marshmallow 及更高版本中执行此操作,则需要询问运行时权限。

【讨论】:

  • 我不想在别人背后发短信。我只想用已经填写的电话号码拨打默认短信。但是你的第二个反应很好
  • 对不起,我不知道。但是您可以做的是创建一个活动,其中包含用于输入数字、消息和两个按钮发送和取消的字段。您可以通过单击按钮发送短信。这样,用户将一直在您的应用中,并且不会在任何人背后发送短信。
  • 我实际上可能会这样做。因为它是一个相对简单的活动生成并且看起来更干净。我只是想避免需要权限。
【解决方案3】:

当你烤面包时,总是意味着它进入了 catch()。 Catch 正在处理 ActivityNotFoundException

如果有帮助,请点击此链接:

https://*.com/a/10613004/5722385

如果您正在使用棉花糖及以上版本,请通过以下链接,它有示例如何添加运行时权限

https://*.com/a/34969604/5722385

因为发送短信被分组到危险的权限,所以你也需要在运行时处理它,只在清单文件中写入权限是不够的。

在添加运行时权限之前,如果您愿意,您可以通过手机启用权限,请按照以下步骤操作。

转到设置 --> 应用程序 --> 选择您的应用程序 --> 权限 --> 启用 短信权限。

您还可以查看此链接以获取应在运行时处理的危险权限列表

https://developer.android.com/guide/topics/permissions/requesting.html

【讨论】: