У меня есть приложение геозахвата, которое позволяет пользователю включить опцию отправки SMS на предварительно запрограммированный номер, когда он находится вне устройства. Это происходит в сервисе переднего плана.
Когда пользователь активирует эту опцию в настройках, я запускаю процесс, чтобы запросить необходимое разрешение:
if (key.equals(getString(R.string.pref_sms_alert)))
{
if (Prefs.getBoolean(R.string.pref_sms_alert, false))
{
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.SEND_SMS}, 1);
}
}
}
и
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
{
switch (requestCode)
{
case 1:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Prefs.put(R.string.pref_sms_alert, true);
}
else
{
Prefs.put(R.string.pref_sms_alert, false);
}
break;
}
}
SMS отправляется в режиме переднего плана по:
if (Prefs.getBoolean(R.string.pref_sms_alert, false))
{
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(Prefs.getString(R.string.pref_sms_receiver, ""),
null,
getString(R.string.txt_sms_alert),
null, null);
}
Это работает, какой Android 6 +.
Когда я пытаюсь сделать это с более старой версией (Kitkat), пользователю предлагается дать разрешение при отправке SMS. Чего он не может сделать, потому что его нет на устройстве.
Как я могу дать постоянное разрешение на отправку SMS до Android 6?