Получение sms в фоновом режиме (когда приложение закрыто) на смартфоне с версией android 7.1 SDK 8.1 oreo (API 26)

212
24 мая 2018, 12:50

Подскажите пожалуйста, написал приложение которое может получать sms в фоновом режиме. На смартфоне с android 5.1.1 приложение получает sms когда закрыто, а на смартфоне с android 7.1 нет. (метод onReceiver отрабатывает на обоих смартфонах, когда приложение свёрнуто, но когда закрыто только на смартфоне с android 5.1.1). Я так понимаю, что разрешение в манифесте с API26 запретили на получение SMS в фоновом режиме, тогда как регистрировать разрешение программно на получение sms?

Manifest.xml

 <receiver android:name=".Acrans.ForSms.MessageReceiver" android:enabled="true">
            <intent-filter android:priority="100">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private static final String TAG="myLogs";
//    Menu_option Menu_option=new Menu_option();
    private static final int PERMISSION_REQUEST_CODE = 123;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    private boolean hasPermissions(){
        int res = 0;
        //string array of permissions,
        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_CONTACTS,
                Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS};;
        for (String perms : permissions){
            res = checkCallingOrSelfPermission(perms);
            if (!(res == PackageManager.PERMISSION_GRANTED)){
                return false;
            }
        }
        return true;
    }
    private void requestPerms(){
        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_CONTACTS,
                Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS};;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            requestPermissions(permissions,PERMISSION_REQUEST_CODE);
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        boolean allowed = true;
        switch (requestCode){
            case PERMISSION_REQUEST_CODE:
                for (int res : grantResults){
                    // if user granted all permissions.
                    allowed = allowed && (res == PackageManager.PERMISSION_GRANTED);
                }
                break;
            default:
                // if user not granted permissions.
                allowed = false;
                break;
        }
        if (allowed){
            //user granted all permissions we can perform our task.
        }
        else {
            // we will give warning to user that they haven't granted permissions.
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

                if ((shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE))
                        &(shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS))&
                        (shouldShowRequestPermissionRationale(Manifest.permission.READ_PHONE_STATE))&
                        (shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE))&
                        (shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS))&
                        (shouldShowRequestPermissionRationale( Manifest.permission.RECEIVE_SMS))&
                        (shouldShowRequestPermissionRationale(Manifest.permission.READ_SMS))){
                    Toast toast = Toast.makeText(getApplicationContext(), R.string.accessRights, Toast.LENGTH_SHORT);
                    TextView view = (TextView) toast.getView().findViewById(android.R.id.message);
                    view.setTextColor(Color.WHITE);
                    toast.show();
                } else {
                    showNoStoragePermissionSnackbar();
                }
            }
        }
    }

    public void showNoStoragePermissionSnackbar() {
        Snackbar mSnackbar =Snackbar.make(MainActivity.this.findViewById(R.id.CL0), R.string.accessRights , Snackbar.LENGTH_LONG)
                .setAction(R.string.action_settings, new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v) {
                        openApplicationSettings();
                        Toast toast = Toast.makeText(getApplicationContext(), R.string.openSettings, Toast.LENGTH_SHORT);
                        TextView view = (TextView) toast.getView().findViewById(android.R.id.message);
                        view.setTextColor(Color.WHITE);
                        toast.show();
                    }
                });
        View snackbarView = mSnackbar.getView();
        snackbarView.setBackgroundColor(Color.WHITE);
        mSnackbar.show();
    }
    public void openApplicationSettings() {
        Intent appSettingsIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(appSettingsIntent, PERMISSION_REQUEST_CODE);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PERMISSION_REQUEST_CODE) {
            return;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
    public void requestPermissionWithRationale() {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {
            final String message = getText(R.string.saveBase).toString();
            Snackbar mSnackbar =Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();
        } else {
            requestPerms();
        }

        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            final String message = getText(R.string.saveBase).toString();
            Snackbar mSnackbar=Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();
        } else {
            requestPerms();
        }
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.READ_CONTACTS)) {
            final String message = getText(R.string.readContact).toString();
            Snackbar mSnackbar=Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();
        } else {
            requestPerms();
        }
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.READ_PHONE_STATE)) {
            final String message = getText(R.string.numberPhone).toString();
            Snackbar mSnackbar=Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();
        } else {
            requestPerms();
        }
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.SEND_SMS)) {
            final String message = getText(R.string.sendSms).toString();
            Snackbar mSnackbar=Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();
        } else {
            requestPerms();
        }
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.RECEIVE_SMS)) {

            final String message = getText(R.string.getSms).toString();
            Snackbar mSnackbar=Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();

        } else {
            requestPerms();
        }
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.READ_SMS)) {
            final String message = getText(R.string.getSms).toString();
            Snackbar mSnackbar=Snackbar.make(MainActivity.this.findViewById(R.id.CL0), message, Snackbar.LENGTH_LONG)
                    .setAction(R.string.grant, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            requestPerms();
                        }
                    });
            View snackbarView = mSnackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            mSnackbar.show();
        } else {
            requestPerms();
        }
    }

}
READ ALSO
Как сделать такой BottomSheet с отступами и закругленными углами?

Как сделать такой BottomSheet с отступами и закругленными углами?

Не получается сделать чтобы были отступы

207
Почему строка из файла properties не равна String ?

Почему строка из файла properties не равна String ?

Сравниваю строки String и значение из файла properties то же String пользуюсь данной конструкцией

192
RouteBuilder Camel

RouteBuilder Camel

помогите разобраться в маршрутах camel плизЧитаю читаю и не понимаю, понимаю как через XML, но мне надо сделать через Java класс, и без Spring

189
ObjectMapper: Не мапит JSON в POJO

ObjectMapper: Не мапит JSON в POJO

Итак,у меня есть метод, который должен получить из запроса JSON, обработать его в POJO и вернуть его

215