我已经开始处理Android M运行时权限。在这里,我面临的问题是,如果从Dialog Frament
类调用RequestPermissionsResult
,那么在同一个Dialog fraend
类中不会调用onRequestPermissionsResult
。但是如果从Activity
类或Frament
类调用onRequestPermissionsResult
方法会在同一类中调用。
以下是我的示例代码:
public class ContactPickerDialog extends DialogFragment {
private static final int READ_CONTACTS_REQUEST_CODE = 12;
private Context mContext;
private void loadContact() {
if(hasPermission(mContext, Manifest.permission.READ_CONTACTS)){
new ContactSyncTask().execute();
} else {
this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
Logger.d("TAG", "dialog onRequestPermissionsResult");
switch (requestCode) {
case READ_CONTACTS_REQUEST_CODE:
// Check Permissions Granted or not
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
new ContactSyncTask().execute();
} else {
// Permission Denied
Toast.makeText(getActivity(), "Read contact permission is denied", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private static boolean hasPermission(Context context, String permission){
return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
}
}
在代码中,我调用了< code >对话框片段类的< code>requestPermissions方法。所以我期待在同一个班级取得好成绩。
感谢任何帮助。提前感谢!
编辑:在这里我添加更多细节,以便对其他人更有帮助。以前我使用 getChildFragmentManager() 来显示 DialogFragment。
ContactPickerDialog dialog = new ContactPickerDialog();
dialog.show(getChildFragmentManager(), "Contact Picker");
但是正如@CommonWare让我用activity来展示DialogFragment。我做了以下的改变,它起作用了。
ContactPickerDialog dialog = new ContactPickerDialog();
dialog.show(getActivity().getSupportFragmentManager(), "Contact Picker");
这个问题似乎在Android支持库23.3.0及以上版本中得到修复。
如果您使用的是支持 v4 片段,则嵌套片段现在将收到对 onRequestPermissionsResult() 的回调。
编辑:@AndrewS,以下是你如何更新。
在build.gradle(app)文件中,更改以下行以使用最新版本的最新支持库24.0.0:
dependencies {
compile 'com.android.support:appcompat-v7:24.0.0'
}
Android中似乎存在一个bug,其中嵌套片段不支持onRequestPermissionsResult()
回调。对于<code>DialogFragment</code>,解决方法似乎是让希望显示对话框的片段调用宿主活动上的方法,而该活动显示<code>对话框fragment>本身。
如果您在支持库中的片段
中,请直接调用RequestPermis()
,并且您的片段的onRequestPermissionsResult()
将被回调。
如果你调用 ActivityCompat.requestPermissions(),
那么 Activity
的 onRequestPermissionsResult()
将被回调。
我有一个片段,其中有recyclerview,并使用recyclerview适配器在这个recyclerview中设置数据。 现在,我在适配器的列表项中单击了一个按钮,我需要检查android中的READ\u EXTERNAL\u STORAGE权限,以查看android中的新权限模型。 我在这个适配器的片段中创建了一个新函数,用于检查是否授予了权限,如果尚未授予权限,则请求权限。 我已经通过了我
下面的代码在活动中运行良好,但我不能使它在片段中工作。 从不调用。
运行playstore Build Apk时,未调用Marshmallow Runtime Permissions onRequestPermissionsResult,但正常调试Apk时运行良好。谁来帮帮我。。谢谢 OnRequestPermissionResult方法
我有一个片段,其中我有RecolyerView和使用RecolyerView适配器在这个RecolyerView中设置数据。 现在,我在适配器的列表项中有一个按钮,单击该按钮,我需要检查android中的READ_EXTERNAL_STORAGE权限,以获取android中的新权限模型。 我在这个适配器的片段中创建了一个新函数来检查权限是否被授予,如果还没有授予,则请求权限。 我已经使用下面的代码
在我的非活动类中,我请求了一个Fine location权限,但回调onRequestPermissionsResult“永远不会被调用”。现在我看到了一些与此相关的问题,但他们都认为请求是从活动或片段发出的,没有人考虑从非活动类发出请求。这是我的代码 这是onRequestPermissionResultCallback方法的实现 解决了:正如一些人提到的“activity”的onRequest
我试图实现marshmallow的权限支持,但我在“OnRequestPermissionsResult”中的代码从未被调用。代码的“onCreate”和“onMapReady”部分工作正常。检查设备是否具有权限并请求权限可以正常工作。 这是我的活动: }
在我活动页面之一的片段中,我希望从用户处获得权限,并在授予权限后执行一些操作,但不起作用,且在授予权限后看不到任何日志
这是我的代码,根据文档,它是用于: 我在这里找到了一个解决方案,但我并不真正理解它,因为它是用编写的,我也不理解。我需要帮助!! ---编辑----