Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法重写onRequestPermissionsResult函数,尽管它是超类android.support.v4.app.ActivityCompat下的抽象方法_Java_Android_Inheritance_Android Gradle Plugin_Superclass - Fatal编程技术网

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。非常感谢。感觉有点失望,我没有注意到超级类是一个接口。