2016-10-25 4 views
0

В настоящее время я внедряю поставщика календаря, однако я наткнулся на незначительную ошибку, которую я бы хотел предотвратить.Android Calendar Check Permission

ContentResolver contentResolver = getContentResolver(); 
ContentValues contentValues = new ContentValues(); 

.... 

Uri uri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, contentValues); // Error pops here 

«Вызов требует разрешений, которое может быть отвергнуто пользователем: код должен явным образом проверять, чтобы увидеть, если разрешение доступно (с checkPermission) или явно обрабатывать потенциальный` SecurityException»

Что является лучшим способом предотвратить эту ошибку?

Любая помощь будет оценена по достоинству.

ответ

4

Handle андроид разрешения первым, проверьте, если они доступны, если вы не можете запросить их, как показано ниже

продолжить функциональность, только если права доступа доступно

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED 
    && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { 
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);}else if(ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) == PackageManager.PERMISSION_GRANTED 
     && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED){ 

ContentResolver contentResolver = getContentResolver(); 
ContentValues contentValues = new ContentValues(); 
Uri uri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, contentValues);} 
+1

Это правильно, но OP должен знать, что ему необходимо запросить разрешения READ_CALENDAR и WRITE_CALENDAR. В противном случае он сделает непригодное для пользователя приложение. OP, вы можете проверить полный документ здесь. Https://developer.android.com/training/permissions/requesting.html –

+0

согласен с @andrei_zaitcev – Ak9637

-2

Ваш targetSdkVersion 23 или выше, просто уменьшить его

+0

Вы должны правильно обрабатывать разрешения в новых версиях android – MichaelStoddart

+0

6.0 не пользуется популярностью, мы не используем api 23, по крайней мере пока. –

+0

По данным андроидных панелей 18,7% устройств Android работают с зефиром, вам определенно следует рассмотреть возможность разрешения разрешений на зефир и выше, вы рискуете потерять большую часть своей пользовательской базы, потому что считаете ее «не популярной» – MichaelStoddart

0

Вы всегда можете добавить бросает SecurityException методу и заботиться о пойманной за исключением далее вверх по течению. Кроме того, я бы рекомендовал использовать эту библиотеку https://github.com/tbruyelle/RxPermissions, если вы заинтересованы в использовании методологии reactivex для решения проблем.