如何在片段中使用ContextCompat?它说片段不能转换为上下文

时间:2019-01-17 09:17:04

标签: android fragment

我试图在Fragment中使用ContextcompatActivityCompat,但显示

  

错误“错误:(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); 
}

我该如何解决?

4 个答案:

答案 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)

“ this”指您的情况下的片段。

这显然意味着您需要ContextActivity的引用。由于您在Fragment类this中使用代码,因此<-引用Fragment而不是ActivityContext

如何获取上下文引用?
通过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);
    }