제목에서 알 수 있듯이 onRequestPermissionsResult
추상 메서드를 재정의하려고하는데 Gradle은 메서드에 대한 수퍼 클래스가 없다고 말합니다. .superClass에서 abstract 메서드인데도 불구하고 onRequestPermissionsResult 함수를 재정의하지 못했습니다. android.support.v4.app.ActivityCompat
the documentation에 따르면 수퍼 클래스는 내가 가져온 ActivityCompat
입니다.
위치 기반 앱용 위치 개체를 만들고 있습니다.
어떻게이 문제를 해결할 수 있습니까? 이 오버라이드 (override)하는 onRequestPermissionsResult
하지 않도록
import android.*;
import android.Manifest;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.app.Activity;
import android.app.PendingIntent;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingApi;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsResult;
import android.content.ContextWrapper;
import android.content.Context;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v4.content.ContextCompat;
import android.util.Log;
/**
* Created by User on 7/2/2016.
*/
public class GoogleLocationHandler implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener{
public GoogleApiClient mGoogleApiClient;
public static final String TAG = GoogleLocationHandler.class.getSimpleName();
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
private final static int MY_PERMISSION_ACCESS_FINE_LOCATION = 1;
private static Context parentBase;
private static Activity parentActivity;
private static PendingIntent parentIntent;
public Location phoneLocation;
private LocationRequest requestLocation;
public GoogleLocationHandler(Context Base, Activity activityBase, PendingIntent intent){
parentBase = Base;
parentActivity = activityBase;
parentIntent = intent;
initialLocationService(parentBase);
}
public void initialLocationService(Context Base)
{
mGoogleApiClient = new GoogleApiClient.Builder(Base)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
requestLocation = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000) // 10 seconds, in milliseconds
.setFastestInterval(1 * 1000); // 1 second, in milliseconds
}
public void connect()
{
mGoogleApiClient.connect();
}
public void pause(){
if (mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, parentIntent);
mGoogleApiClient.disconnect();
}
}
public void disconnect()
{
if (mGoogleApiClient.isConnected())
{
mGoogleApiClient.disconnect();
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
if(PackageManager.PERMISSION_GRANTED ==
(ContextCompat.checkSelfPermission(parentBase, Manifest.permission.ACCESS_FINE_LOCATION)))
{
phoneLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (phoneLocation == null) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, requestLocation, parentIntent);
} else {
Log.d(TAG, phoneLocation.toString());
}
}
else
{
ActivityCompat.requestPermissions(parentActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSION_ACCESS_FINE_LOCATION);
}
}
//public void onRequestPermissionsResult(int requestCode,
// String permissions[], int[] grantResults)
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[],
@NonNull int [] grantResults)
{
switch(requestCode)
{
case MY_PERMISSION_ACCESS_FINE_LOCATION:{
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if(PackageManager.PERMISSION_GRANTED ==
(ContextCompat.checkSelfPermission(parentBase, Manifest.permission.ACCESS_FINE_LOCATION)))
{
phoneLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (phoneLocation == null) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, requestLocation, parentIntent);
} else {
Log.d(TAG, phoneLocation.toString());
}
}
else
{
ActivityCompat.requestPermissions(parentActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSION_ACCESS_FINE_LOCATION);
}
}
}
}
}
AHA. 고마워. 조금 실망한 느낌으로 나는 수퍼 클래스가 인터페이스라는 것을 알지 못했다. – law