我可以在android布局中检查授予的权限

时间:2016-06-07 08:39:34

标签: android android-layout android-permissions

是否可以仅在授予某个权限的情况下向布局添加视图?

我正在使用名为QRCodeReaderView的QR码阅读器库。我在布局中使用com.dlazaro66.qrcodereaderview.QRCodeReaderView

在Android M及更高版本上,如果视图位于布局中,除非用户接受该权限,否则会导致应用程序崩溃。

加载布局时是否可以进行检查,并且只有在获得许可的情况下才决定包含此视图

2 个答案:

答案 0 :(得分:3)

@ CherryPerry答案的一些补充:
无需创建两种不同的布局。您可以将ViewStubQRCodeReaderView放在您的布局中,只有在获得许可的情况下才会调用inflate

if (permissionGranted()) {
    qrReaderStub.inflate();
}

more about ViewStub

<小时/> 样品:

<!-- qr_reader.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<com.dlazaro66.qrcodereaderview.QRCodeReaderView
    android:id="@+id/qr_reader"
    android:layout_width="100dp"
    android:layout_height="100dp" />


<!-- your activity or fragment -->
<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ViewStub 
           android:id="@+id/qr_stub"
           android:layout="@layout/qr_reader"
           android:layout_width="100dp"
           android:layout_height="100dp" />

</FrameLayout>


//your activity class
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        ViewStub.class.cast(findViewById(R.id.qr_stub)).inflate();
    }
}

答案 1 :(得分:2)

  

加载布局时是否可以进行检查,并且只有在获得许可的情况下才决定包含此视图

是的,你可以。致电ContextCompat.checkSelfPermission。如果结果为PackageManager.PERMISSION_GRANTED,则授予权限。

所以你可以

  1. 创建QRCodeReaderView的实例,并仅在授予权限时将其添加到您创建的布局中。创建内部没有QRCodeReaderView的布局,而是使用FrameLayout。如有必要,请在权限检查后将QRCodeReaderView放入此FrameLayout
  2. 制作2种不同的布局(一种使用QRCodeReaderView,另一种不使用),然后根据setContentView结果在inflater.inflate中调用onCreateViewcheckSelfPermission
  3. 我建议您先使用,这样您就可以实现请求权限。当用户授予权限时,您会将QRCodeReaderView添加到您的布局中。