Я новичок в создании приложений для Android и изо всех сил пытаюсь найти способ отправить SMS на номер телефона, который был сохранен с помощью SharedPreferences. В MainActivity я сохранил номер телефона и имя пользователя в файле с именем savedata. Затем в другом действии, называемом SMS, я пытаюсь отправить SMS на сохраненный номер телефона после нажатия кнопки, помеченной как кнопка отправки. В манифесте 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 после нажатия кнопки отправки:
--------- начало сбоя 12.02.2020 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(SmsManager.java: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(View.java:6256 ) в android.view.View$PerformClick.run(View.java:24701) в android.os.Handler.handleCallback(Handler.java:789) в android.os.Handler.dispatchMessage(Handler.java:98) в android .os.Looper.loop(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(ZygoteInit.java:767)