2017-01-23 14 views
0

Я немного потерял этот новый материал для разрешения API для 21+. Мой мин составляет 21, цель 23.Каков правильный способ исправления разрешений камеры для новых API-интерфейсов Android?

У меня есть это в моем манифесте:

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/> 

<uses-feature 
    android:name="android.hardware.camera" 
    android:required="false"/> 

Правильно ли это? Смогут ли пользователи загрузить мое приложение, даже если у них нет камеры?

+0

Нет, если цель 23, то вы должны использовать Runtime Permission. – Shekhar

+0

Вам еще не нужны записи манифеста даже с разрешения Runtime? – user7457210

+0

Конечно, в манифесте вам нужно будет сделать записи. – Shekhar

ответ

0

Пользователи могут загружать ваше приложение в обычном режиме. Но если ваш целевой SDK равен 23, вам необходимо выполнить Runtime Permission. Это означает, что вам необходимо проверить и запросить разрешение камеры во время выполнения.

По умолчанию разрешение камеры не предоставляется. Если вы этого не сделаете, ваше приложение выйдет из строя.

Вот учебник по работе с времени выполнения разрешения на API 23 Link

+0

Нужно ли мне менять свой манифест? И разрешение должно быть просто 'android.permission.CAMERA' для времени выполнения, правильно? – user7457210

+0

Вам не нужно менять «манифест». Вот отличный учебник по работе с разрешением Runtime по API 23 https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en – TOP

+0

Так что я могу в основном возвращать true 'if (Build.VERSION.SDK_INT <23)'? – user7457210

0

вы можете использовать Googles easypermission библиотеки легко использовать

в вашей деятельности переопределение onRequestPermissionsResult как это:

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     // Forward results to EasyPermissions 
     EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); 
    } 
} 

, а затем реализовать разрешение на возврат

public class MainActivity extends AppCompatActivity 
    implements EasyPermissions.PermissionCallbacks { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     // Forward results to EasyPermissions 
     EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); 
    } 

    @Override 
    public void onPermissionsGranted(int requestCode, List<String> list) { 
     // Some permissions have been granted 
     // ... 
    } 

    @Override 
    public void onPermissionsDenied(int requestCode, List<String> list) { 
     // Some permissions have been denied 
     // ... 
    } 
} 

И запрос pemission камеры, как это:

@AfterPermissionGranted(RC_CAMERA_PERM) 
    public void cameraTask() { 
     if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA)) { 
      // Have permission, do the thing! 
      Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show(); 
     } else { 
      // Ask for one permission 
      EasyPermissions.requestPermissions(this, getString(R.string.rationale_camera), 
        RC_CAMERA_PERM, Manifest.permission.CAMERA); 
     } 
    } 

для дополнительной проверки кода образца это GitHub хранилище easypermission андроида

easypemission

Счастливый кодирования