我试图在Fragment中使用Contextcompat
和ActivityCompat
,但显示
错误“错误:(49,50)错误:不兼容的类型:无法将CallFragment转换为上下文”和“错误:(51,51)错误:不兼容的类型:无法将CallFragment转换为活动”。
if(ContextCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL);
}
我该如何解决?
答案 0 :(得分:1)
if(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL); }
使用getContext()代替片段中的
答案 1 :(得分:0)
private Context context;
public Yourclassname(Context context) {
this.context = context;
}
使用上下文代替“ this”,并在下面的代码中使用
if(ContextCompat.checkSelfPermission(context,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{android.Manifest.permission.CALL_PHONE}, REQUEST_CALL);
}
答案 2 :(得分:0)
这显然意味着您需要Context
和Activity
的引用。由于您在Fragment类this
中使用代码,因此<-引用Fragment而不是Activity
或Context
。
如何获取上下文引用?
通过Fragment类中可用的onAttachMethod(Context context)
方法获取它。
class YourFragment extends Fragment{
private Context context;
@Override
public void onAttach(Context context)
{
this.context = context;
}
}
如何在“片段”中获取“活动”引用?
getActivity();
或
(Activity)context;
答案 3 :(得分:0)
虽然已经很晚了,但我希望有人能对此有所帮助。
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_SMS}, 101);
}