2017-01-07 4 views
2

Я хочу отправить СМС из приложения, для которого я написал код ниже, что довольно просто. Но вопрос я облицовка, Никакой деятельности не началась отправка сообщенияОтправлено SMS wont startActivity

метода, чтобы отправить сообщение:

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()

+0

вы тестирование на зефир или выше? – Mrinmoy

ответ

0

Как вы получаете тост всегда означает его вхождение в catch(). Поймай обрабатывают ActivityNotFoundException

Перейдите по этой ссылке, если это поможет:

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

Если вы работаете с зефиром и выше, любезно пройти через ссылку ниже, это имеющее пример, как добавить Runtime-разрешение

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

Поскольку отправка sms сгруппирована в опасное разрешение, поэтому вам необходимо обрабатывать его также во время выполнения, но только письменное разрешение в файле манифеста недостаточно.

Перед добавлением разрешения во время выполнения, если вы хотите, вы можете разрешить разрешение от вашего телефона, выполните следующие действия.

Перейти к настройкам -> apps -> выбрать приложение -> разрешений -> разрешить sms разрешение.

Вы также можете проверить эту ссылку, чтобы получить список опасных разрешений, которые должны быть обработаны во время выполнения

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

+0

Это было спасибо –

1

Код, который вы выполняете стар. Это код для отправки SMS с вашего 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 Зефир и выше вам нужно будет спросить Разрешение на выполнение.

+0

Я не хочу отправлять SMS за чью-то спину. Я просто хочу вызвать текстовый мессенджер по умолчанию с уже заполненным номером телефона. Но ваш второй ответ был хорошим –

+0

Извините, я этого не знал. Но то, что вы могли бы сделать, это создать действие, которое содержит поля для ввода номера, сообщения и двух кнопок «Отправить» и «Отмена». И вы можете отправить sms с помощью кнопки. Таким образом, пользователь будет в вашем приложении все время, и не будет отправки sms за чью-либо спину. –

+0

Я действительно могу это сделать. потому что это относительно простая деятельность для создания и будет выглядеть более чистой. я просто пытался предотвратить необходимость разрешений. –

2

Попробуйте это:

также нет необходимости:

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

Просто используйте этот код:

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();       
       } 
+0

спасибо. ваша строка кода sendIntent.setData (Uri.parse ("sms:")); помог мне. Я делал «smsto:» в качестве примера, который я делал, и это нарушало систему –

 Смежные вопросы

  • Нет связанных вопросов^_^