У меня есть метод с именем getPermisions, который использует вспомогательный метод с именем hasPermissions. Я вызываю getPermissions () в методе onCreate следующим образом. , .
getPermissions();
//code here uses these permissions
camera = Camera.open(); //but this code executes async to getPermissions method
Код для getPermissions выглядит следующим образом. , .
private boolean hasPermissions(Context context, String... permissions) {
if (context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
private void getPermissions()
{
//before we display setup dialog we must get permissions . . .
int PERMISSION_ALL = 1;
String[] PERMISSIONS = {
android.Manifest.permission.READ_PHONE_STATE,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.CAMERA
};
if(!hasPermissions(this, PERMISSIONS)){
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
}
Код работает отлично, если я иду по нему, но при фактическом запуске приложения код getPermissions () асинхронно запускается в потоке основного пользовательского интерфейса. Поэтому, когда я вызываю getPermissions (), основной поток продолжает работать с разрешениями, которые я все еще запрашиваю.
Мне нужно задержать основной поток, пока пользователь отвечает на все три диалоговых окна. Как лучше это сделать?