Подскажите пожалуйста, написал приложение которое может получать 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();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не получается сделать чтобы были отступы
Сравниваю строки String и значение из файла properties то же String пользуюсь данной конструкцией
помогите разобраться в маршрутах camel плизЧитаю читаю и не понимаю, понимаю как через XML, но мне надо сделать через Java класс, и без Spring
Итак,у меня есть метод, который должен получить из запроса JSON, обработать его в POJO и вернуть его