Pri*_*one 132 android android-6.0-marshmallow
我有一个片段,我在其中使用recyclerview适配器在recyclerview中使用recyclerview和设置数据.
现在,我在适配器的列表项中点击了一个按钮,我需要在android中检查android中的新权限模型的READ_EXTERNAL_STORAGE权限.
我已在此适配器的片段中创建了一个新函数,以检查是否授予了权限,如果尚未授予权限,则请求权限.
我已经通过MyFragment.this作为适配器中的参数,并在按钮单击适配器中调用片段的方法.
我使用下面的代码在片段中调用requestPermission.
if(ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
}
Run Code Online (Sandbox Code Playgroud)
我onRequestPermissionsResult
使用下面的代码覆盖了片段中的方法:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case ConstantVariables.READ_EXTERNAL_STORAGE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, proceed to the normal flow.
startImageUploading();
} else {}
Run Code Online (Sandbox Code Playgroud)
但它没有被调用,而是调用了这个Activity的onRequestPermissionsResult方法.
我已经在片段的父活动中定义了相同的onRequestPermissionsResult方法,并且它被调用.
我无法删除活动的onRequestPermissionsResult方法,但是当我请求片段的权限时,我想调用片段的onRequestPermissionsResult方法.我怎样才能做到这一点?我在这里做错了什么,如果有人在这里有想法,请帮助我.
Var*_*129 315
编辑答案以涵盖更广泛的问题
我认为你混淆片段和活动的方法.上个月我的项目有类似的问题.请检查您是否最终有以下内容:
super.onRequestPermissionsResult
从活动中拨打电话onRequestPermissionsResult
.看看它是否有帮助.
ful*_*oon 83
我从片段和片段中请求了位置权限,我需要更改它:
ActivityCompat.requestPermissions(getActivity(), new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQ_CODE);
Run Code Online (Sandbox Code Playgroud)
对此:
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQ_CODE);
Run Code Online (Sandbox Code Playgroud)
然后在片段中调用onRequestPermissionsResult.
Far*_*aev 35
这是人们在编写棉花糖时常犯的错误。
在 AppCompatActivity 中时,应该使用 ActivityCompat.requestPermissions;在 android.support.v4.app.Fragment 中时,您应该简单地使用 requestPermissions(这是 android.support.v4.app.Fragment 的实例方法) 如果您在片段中调用 ActivityCompat.requestPermissions,则调用 onRequestPermissionsResult 回调活动而不是片段。
requestPermissions(permissions, PERMISSIONS_CODE);
Run Code Online (Sandbox Code Playgroud)
如果您从片段中调用此代码,则它具有自己的 requestPermissions 方法。
所以基本概念是,如果你在一个活动中,那么调用
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
Run Code Online (Sandbox Code Playgroud)
如果在片段中,只需调用
requestPermissions(new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
Run Code Online (Sandbox Code Playgroud)
作为参考,我从这个链接https://www.coderzheaven.com/2016/10/12/onrequestpermissionsresult-not-called-on-fragments/得到了答案
小智 18
改变这个:
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.READ_CONTACTS),
PERMISSIONS_REQUEST_READ_CONTACTS
)
Run Code Online (Sandbox Code Playgroud)
对此:
requestPermissions(
arrayOf(Manifest.permission.READ_CONTACTS),
PERMISSIONS_REQUEST_READ_CONTACTS
)
Run Code Online (Sandbox Code Playgroud)
小智 9
在片段中,您不应该将 ActivityCompat 用于 requestPermissions,您只需使用 requestPermissions 并在方法中传递两个参数。
对于经验:
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
Run Code Online (Sandbox Code Playgroud)
requestPermissions
Fragments上的方法需要API级别23或更高级别.
如果您的应用针对较低版本,则可以使用
FragmentCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
Run Code Online (Sandbox Code Playgroud)
首先,您需要添加support-v13依赖项:
implementation "com.android.support:support-v13:$supportLibVersion"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51625 次 |
最近记录: |