2016-11-25 2 views
0

Я дал READ_SMS, а также READ_CALL_LOG разрешение в файле манифеста, но все же я получаю SecurityException в моих BroadcastReceiver.Ошибка разрешения в BroadcastReceiver

Код:

@Override 
public void onReceive(Context context, Intent intent) { 
    getMissedCallCount(context); 
    getUnreadSMSCount(context); 
} 

private void getMissedCallCount(Context context) { 
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) { 
     Log.d("Call Logs permission", "Not provided..."); 
     return; 
    } 
    String[] projection = {CallLog.Calls.CACHED_NAME, CallLog.Calls.CACHED_NUMBER_LABEL, CallLog.Calls.TYPE}; 
    String where = CallLog.Calls.TYPE + "=" + CallLog.Calls.MISSED_TYPE; 
    Cursor c = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, projection, where, null, null); 
    c.moveToFirst(); 
    Log.d("CALL COUNT: ", ""+c.getCount()); 
    c.close(); 
} 

Log:

Call Logs permission: Not provided...

Любая идея об этой проблеме?

+0

Обеспечить не READ_SMS но разрешение READ_CALL_LOG в разрешении манифеста (вы добавили read_sms в манифесте, но во время выполнения проверки разрешения read_call_log, он получил? Там разрешения имеют разные группы). И если вам нужно разрешение READ_SMS, вы должны запросить его: https://developer.android.com/training/permissions/requesting.html https://developer.android.com/guide/topics/security/permissions.html # normal-dangerous – krossovochkin

+0

Я дал оба разрешения. См. Мой отредактированный вопрос. – Satheshkumar

+1

@Satheshkumar полностью прочитал [это] (https://developer.android.com/guide/topics/security/permissions.html) полностью. – Gattsu

ответ

1

Вот код:

Проверка разрешений:

// Assume thisActivity is the current activity 
    int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_SMS); 

следующие проверки кода, если приложение имеет разрешение на чтение контактов пользователя, и

просит разрешения, если необходимо:

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_SMS)!= PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,Manifest.permission.READ_SMS)) { 

     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity,new String[]{Manifest.permission.READ_SMS},MY_PERMISSIONS_REQUEST_READ_SMS); 

     // MY_PERMISSIONS_REQUEST_READ_SMS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

Выход:

enter image description here

official google doc & complete blog

+0

Вы большое спасибо! – Satheshkumar

+0

@Satheshkumar приветствуется и радует кодирование :) – Gattsu

Смежные вопросы