Отправка смс с услуги переднего плана - PullRequest
0 голосов
/ 14 мая 2018

У меня есть приложение геозахвата, которое позволяет пользователю включить опцию отправки 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?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Оказалось, проблема в конкретном устройстве, используемом для тестирования. Установлено стороннее программное обеспечение для управления разрешениями, которое снова запрашивает разрешения, когда SMS действительно отправлено.

Я протестировал его на устройстве Lollypop без этого программного обеспечения, и у меня не было проблем.

0 голосов
/ 14 мая 2018

Приложения, предшествующие Api 23, принимают все разрешения при установке, а не во время выполнения.Таким образом, проблема в том, что onRequestPermissionsResult вызывается только тогда, когда разрешение предоставлено.Если приложение уже имеет разрешение, этот метод не вызывается, поэтому добавьте следующее:

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);
        } else
        {
            Prefs.put(R.string.pref_sms_alert, true);
        }
    }
}

Таким образом, если разрешение уже принадлежит приложению, оно все равно будет работать.

...