java - 无法解析 "onRequestPermissionsResult"

标签 java android service request gps

我是一名游戏开发者,不擅长 android。我想创建一个“扩展服务”的库类,用于发送 GPS 位置。

虽然我将 onRequestPermissionsResult 保留在 “MainActivity” 中导出的 Google 项目中,但我没有遇到问题。但是,当我尝试将其放入我的库类中时,我开始收到以下错误。

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults.length>0&&grantResults[0]== PackageManager.PERMISSION_GRANTED)
        {
            if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED)
            {
                mLocationManager.requestLocationUpdates(mLocationManager.GPS_PROVIDER, 0, 0, locationListener);
            }
        }
    }

无法解析“onRequestPermissionsResult”


//------------------------------------------------------------

    package hp.test.com.mylibrary;


    import android.Manifest;
    import android.app.Activity;    
    import android.app.Service; 
    import android.content.Context;       
    import android.content.Intent;
    import android.content.pm.PackageManager;  
    import android.location.Location; 
    import android.location.LocationListener; 
    import android.location.LocationManager;  
    import android.os.Build;  
    import android.os.Bundle; 
    import android.os.IBinder;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.ActivityCompat; 
    import android.support.v4.content.ContextCompat; 

    public class GpsLocation  extends Service {
        public static GpsLocation Instance;                       
        public  LocationManager   mLocationManager;                         
        public  LocationListener  locationListener;                        
        public  Context mainContext;                                             
        public  Activity mainActivity;                                                        
        public  String[] premition={Manifest.permission.ACCESS_FINE_LOCATION};                 


        public static GpsLocation Instance ()                 
        {                                    
            if(Instance==null)                                         
            {                                           
                Instance = new GpsLocation();                                
            }                                                       
            return Instance;                                          
        }                                              

        public void setMainContext(Context context)                           
        {
            System.out.println("********** setMainContext");
            mainContext=context;
        }
        public void setmainActivity(Activity activity)
        {
            mainActivity=activity;
            System.out.println("********** setmainActivity"+ mainActivity);
        }
        public   void OpenLocationSeating()
        {
            mainActivity.startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
        }







        public void CreateData()
        {
            mLocationManager = (LocationManager) mainContext.getSystemService(LOCATION_SERVICE);
            locationListener = new LocationListener()
            {
                @Override
                public void onLocationChanged(Location location) {
                    System.out.println("********** onLocationChanged"+location.toString());
                }

                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {
                    System.out.println("********** onStatusChanged");

                }

                @Override
                public void onProviderEnabled(String s) {
                    System.out.println("********** onProviderEnabled");

                }

                @Override
                public void onProviderDisabled(String s) {
                    System.out.println("********** onProviderDisabled");

                }
            };
            checkPermissions();
        }





        public   void checkPermissions()
        {
            if (Build.VERSION.SDK_INT >= 23)
            {
                if (ActivityCompat.checkSelfPermission(mainContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mainContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                {
                    ActivityCompat.requestPermissions(mainActivity,premition,1);
                }else
                {
                    mLocationManager.requestLocationUpdates(mLocationManager.GPS_PROVIDER, 0, 0, locationListener);
                }
            }
            else {
            }
        }




        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
        {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if(grantResults.length>0&&grantResults[0]== PackageManager.PERMISSION_GRANTED)
            {
                if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED)
                {
                    mLocationManager.requestLocationUpdates(mLocationManager.GPS_PROVIDER, 0, 0, locationListener);
                }
            }
        }

        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }  }

最佳答案

您无法在非 Activity 类中重写onRequestPermissionsResult,在您的情况下是Service。简单来说,onRequestPermissionsResultActivity类中的方法,因此只能在继承Activity类的类中使用(出于兼容性目的,您也可以使用AppCompatActivity)。

该限制还意味着 ActivityCompat.requestPermissions 。第一个参数本身的类型是 Activity 而不是 Context。在 Service 中直接将 Activity obj 传递给 requestPermissions 并不是一个好主意,也不是一个坏习惯,因为它会导致内存泄漏和调试问题。

在 Activity 中移动权限请求和响应处理代码,并在 Activity 中请求权限。

关于java - 无法解析 "onRequestPermissionsResult",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51037204/

相关文章:

android - 如何将android按钮更改为深灰色而不是浅灰色

android - 谷歌地图离线安卓开发

grails - 更改grails中注入(inject)服务的名称

Laravel 创建服务提供者参数 1 必须实现服务提供者

java - Dropwizard/Jersey 在 GET 请求中给出 "Unable to process JSON"消息

java - 如何获取包含占位符的属性的原始值?

java - java中的方阵和次对角线

java - 错误 : java. io.IOException : wrong value class: class org. apache.hadoop.io.Text 不是类 Myclass

android - 未调用滑动时的 tabLayout.setOnTabSelectedListener

java - Android服务中的定时器