Являются ли ActivityCompat и ContextCompat взаимозаменяемыми?

#java #android

#java #Android

Вопрос:

Это фрагмент кода для запроса разрешения на доступ к точному местоположению в устройстве.

 if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);

    } 

...
  

Если бы вместо этого я переключил ContextCompat с ActivityCompat наоборот, будет ли мой код по-прежнему функционировать по желанию? Например,

 if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){

    ContextCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);

} 

...
  

Я знаю, что ContextCompat является подклассом ActivityCompat, но что определяет, когда использовать ContextCompat или ActivityCompat, поскольку они оба используют одни и те же методы?

Ответ №1:

На самом деле компромисса нет. Не уверен, почему они так написали — checkSelfPermission() — это метод ContextCompat, а ActivityCompat является подклассом (дочерним) ContextCompat, поэтому вы можете передавать любой из них всякий раз, когда требуется объект класса ContextCompat.

см .