只有在授予特定权限的情况下,才有可能向布局添加视图?我可以在Android布局中检查授予的权限
我正在使用一个名为QRCodeReaderView的QR码阅读器库。我在布局中使用com.dlazaro66.qrcodereaderview.QRCodeReaderView
。
在Android M及更高版本上,如果视图位于布局中,除非用户接受该权限,否则会导致应用程序崩溃。
是否有可能加载布局时,我可以做一个检查,并决定只包括如果权限授予
只有在授予特定权限的情况下,才有可能向布局添加视图?我可以在Android布局中检查授予的权限
我正在使用一个名为QRCodeReaderView的QR码阅读器库。我在布局中使用com.dlazaro66.qrcodereaderview.QRCodeReaderView
。
在Android M及更高版本上,如果视图位于布局中,除非用户接受该权限,否则会导致应用程序崩溃。
是否有可能加载布局时,我可以做一个检查,并决定只包括如果权限授予
@ CherryPerry的答案的一些补充:
没有必要创建两个不同的布局。你可以把ViewStub
与QRCodeReaderView
到您的布局,并调用inflate
只有权限授予:
<!-- 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();
}
}
这种观点是否有可能加载布局时,我可以做一个检查,并决定仅在获得许可的情况下才包括此视图
是的,您可以。致电ContextCompat.checkSelfPermission
。如果结果是PackageManager.PERMISSION_GRANTED
,则授予许可。
所以,你可以
QRCodeReaderView
实例,并把它添加到您的布局仅创建如果被许可,在里面创建没有QRCodeReaderView
的布局,但用FrameLayout
代替。如有必要,在权限检查后将QRCodeReaderView
放在此FrameLayout
之内。QRCodeReaderView
和其他没有),并调用setContentView
或inflater.inflate
在onCreateView
依赖于checkSelfPermission
的结果。我推荐你第一个,所以你可以实现请求权限。当用户授予权限时,您将QRCodeReaderView
添加到您的布局。