Невозможно отправить смс на сохраненный номер в android studio - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок ie в приложении android и пытаюсь найти способ отправить SMS на номер телефона, который был сохранен с помощью SharedPreferences. В MainActivity я сохранил номер телефона и имя пользователя в файле с именем сохраненные данные. Затем в другой операции под названием SMS я пытаюсь отправить SMS на сохраненный номер телефона после нажатия кнопки с надписью sendbutton. В манифесте android я упомянул разрешение SEND_SMS.

Сборка и установка выполнены успешно, но приложение падает. Пожалуйста, помогите и спасибо заранее. Это код:

public class SMS extends AppCompatActivity {
    private TextView header;
    private Button sendbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms);
        header = (TextView) findViewById(R.id.headerText);
        sendbutton = (Button) findViewById(R.id.button);
        sendbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int permissionCheck = ContextCompat.checkSelfPermission(SMS.this, Manifest.permission.SEND_SMS);


                if( permissionCheck == PackageManager.PERMISSION_GRANTED) {
                    MyMessage();
                } else {
                    ActivityCompat.requestPermissions(SMS.this, new String[]{Manifest.permission.SEND_SMS}, 0);
                }

            }


        });


    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 0:
                if (grantResults.length >= 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    MyMessage();
                } else {
                    Toast.makeText(getApplicationContext(), "Permission needed to send SMS", Toast.LENGTH_SHORT).show();
                }

                break;
        }

    }

    private void MyMessage() {
        //SharedPreferences result = getSharedPreferences("saveddata", MODE_PRIVATE);
        SharedPreferences result = getSharedPreferences("saveddata", MODE_PRIVATE);
        String savedname = result.getString("NAME", "name not found");
        String savedphone = result.getString("PHONE", "phone not found");

        String message = "I need help" + " " + savedname ;
        if (!savedphone.equals("")) {

            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(savedphone, null, message, null, null);
            Toast.makeText(getApplicationContext(), "SMS sent", Toast.LENGTH_SHORT).show();

        } else {
            Toast.makeText(getApplicationContext(), "Phone number or name n.a.", Toast.LENGTH_SHORT).show();
        }
    }
}

Я получаю это сообщение в logcat после нажатия кнопки отправки:

--------- начало cra sh 2020-02-12 09: 11: 20.331 28633-28633 / com.example.testing E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: com.example.testing, PID: 28633 java .lang.SecurityException: Ни один пользователь 10086 ни текущий процесс не имеет android .permission.READ_PHONE_STATE. в android .os.Parcel.readException (Parcel. java: 1942) в android .os.Parcel.readException (Parcel. java: 1888) в com. android .internal.telephony.ISms $ Stub $ Proxy.sendTextForSubscriber (ISms. java: 789) в android .telephony.SmsManager.sendTextMessageInternal (SmsManager. java: 329) в android .telephony.SmsManager.sendTextMessage. : 312) на com.example.testing.SMS.MyMessage (SMS. java: 77) на com.example.testing.SMS.access $ 000 (SMS. java: 18) на com.example.testing.SMS $ 1.onClick (SMS. java: 36) на android .view.View.performClick (просмотр. java: 6256) на android .view.View $ PerformClick.run (просмотр. java: 24701) в android .os.Handler.handleCallback (Обработчик. java: 789) в android .os.Handler.dispatchMessage (Обработчик. java: 98) в android .os.Looper.l oop (Looper. java: 164) в android .app.ActivityThread.main (ActivityThread. java: 6541) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.Zygote $ MethodAndArgsCaller.run (Zygote. java: 240) в com. android .internal.os.ZygoteInit.main (Z ygoteInit. java: 767)

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

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

В build.gradle добавить:

implementation 'com.karumi:dexter:5.0.0'

И использовать его в своей деятельности как:

val requiredPermissions =listOf(Manifest.permission.SEND_SMS,
                Manifest.permission.READ_PHONE_STATE)

Dexter.withActivity(this)
     .withPermissions(requiredPermissions)
     .withListener(object : MultiplePermissionsListener {
        override fun onPermissionRationaleShouldBeShown(
             permissions: MutableList<PermissionRequest>?,
                    token: PermissionToken?
             ) {
                    /* ... */
                }

        override fun onPermissionsChecked(report: MultiplePermissionsReport) = 
             if (report.isAnyPermissionPermanentlyDenied) {
                toast("You should grant all permissions") 
             } else {
                toast("All permissions granted now send sms here")
              }).check()

0 голосов
/ 12 февраля 2020

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

...