Java 无法重写onRequestPermissionsResult函数,尽管它是超类android.support.v4.app.ActivityCompat下的抽象方法
正如标题所示,我试图覆盖Java 无法重写onRequestPermissionsResult函数,尽管它是超类android.support.v4.app.ActivityCompat下的抽象方法,java,android,inheritance,android-gradle-plugin,superclass,Java,Android,Inheritance,Android Gradle Plugin,Superclass,正如标题所示,我试图覆盖onRequestPermissionsResult抽象方法,但Gradle说该方法没有超类 根据,超类是我导入的ActivityCompat 我正在为基于位置的应用程序创建位置对象 我如何解决这个问题 下面的代码片段 import android.*; import android.Manifest; import android.content.IntentSender; import android.content.pm.PackageManager; import
onRequestPermissionsResult
抽象方法,但Gradle说该方法没有超类
根据,超类是我导入的ActivityCompat
我正在为基于位置的应用程序创建位置对象
我如何解决这个问题
下面的代码片段
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);
}
}
}
}
}
您的自定义类
GoogleLocationHandler
未实现,因此它没有要覆盖的onRequestPermissionsResult
调用
ActivityCompat.requestPermissions
时,正是parentActivity
接收到对onRequestPermissionsResult
的回调,它不会自动调用GoogleLocationHandler
中的任何方法。您需要手动将信息从活动的onRequestPermissionsResult
传递到您的GoogleLocationHandler
AHA。非常感谢。感觉有点失望,我没有注意到超级类是一个接口。