2017-02-04 11 views
3

Я сделал приложение, у которого есть запрос на камеру и GPS, но вот, я выполняю Я получаю это Теплый несколько раз с меньшим количеством 1 сек друг от друга ,Получение W/Activity: может потребовать только один набор разрешений за один раз

W/активность: Может reqeust только один набор разрешений на один раз)

Может кто-нибудь сказать мне, почему?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent = getIntent(); 
    mStatusCamera = intent.getStringExtra("camera"); 
    mScannerView = new ZXingScannerView(this) { 

     @Override 
     protected IViewFinder createViewFinderView(Context context) { 
      return new CustomZXingScannerView(context); 
     } 

    }; 
    List<BarcodeFormat> formats = new ArrayList<>(); 
    mListaPassageiros = new ArrayList<>(); 
    formats.add(BarcodeFormat.QR_CODE); 
    setContentView(mScannerView); 
    int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    if (currentapiVersion >= android.os.Build.VERSION_CODES.M) { 
     if (!checkPermission()) { 
      requestPermission(); 
     } else { 
      executarDepoisDaPermissao(); 
     } 
    } 
} 
private boolean checkPermission() { 
    return (ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA) == PackageManager.PERMISSION_GRANTED 
    && ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED 
    && ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED); 
} 

public void executarDepoisDaPermissao() { 
    final BancoController crud = new BancoController(getBaseContext()); 
    mConectado = isNetworkAvailable(); 
} 

Added RequestPermissio по запросу.

private void requestPermission() { 
    int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    if (currentapiVersion >= android.os.Build.VERSION_CODES.M) { 
     if (!checkPermission()) { 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, 
        Manifest.permission.ACCESS_FINE_LOCATION, 
        Manifest.permission.ACCESS_COARSE_LOCATION}, ASK_MULTIPLE_PERMISSION_REQUEST_CODE); 
     } 
    } 

} 

Могу ли я использовать этот способ?

+0

Может youshow метода requestPermission? –

ответ

2

Я думаю, проблема в том, что вы запрашиваете разрешения на два разрешения, вы должны спросить только о том, какое место будет работать для обоих.

+0

Мой компьютер выключен. Попробуем это последнее. –

+0

Я не мог дождаться. Да, это была проблема. Thx –

+0

Но иногда вам нужны разрешения, которые являются взаимоисключающими. Для этого найдите ответ Витора Хьюго Швааба – Dale

4

Итак, я не могу видеть ваш метод requestPermission(), но вы не должны отправлять несколько запросов на разрешение в одно и то же время.

Вы должны сделать ОДИН запрос со всеми разрешениями.

int permissions_code = 42; 
String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}; 

if(!hasPermissions(this, permissions)){ 
    ActivityCompat.requestPermissions(this, permissions, permissions_code); 
} 
+0

Almos то же самое, что есть, не так ли? –

+1

Почти. Но Android покажет только ОДИН красивый и хорошо анимированный диалог разрешения. Я предполагаю, что это цель. Диалоговое диалоговое окно считается плохой практикой интерфейса. –

+0

1 В то время, но будет иметь стрелу к следующей. Но я не показываю диалог над другим. Или я, и я не вижу этого? –

0

Для тех, кто еще спотыкаясь на этой issue..You нужен запрос разрешения последовательно, как это:

onRequestPermissionResult(){ 
case permission1: 
if (permission1.aquired()){ 
....//do what you do 
requestPermission2(); 
} 
case permission2: 
if (permission2.aquired()){ 
....//do what you do 
requestPermission3(); 
} 

}