Не удается разрешить "onRequestPermissionsResult" - PullRequest
0 голосов
/ 26 июня 2018

Я разработчик игр и не очень хорош в Android. Я хочу создать библиотечный класс, который "расширяет службу" и отправляет данные о местоположении GPS.

Пока я сохраняю onRequestPermissionsResult в моем экспортированном проекте Google в "MainActivity", проблема не возникает. Однако, когда я пытаюсь поместить его в мой класс библиотеки, я получаю следующую ошибку.

    @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;
        }  }

1 Ответ

0 голосов
/ 26 июня 2018

Вы не можете переопределить onRequestPermissionsResult в классе неактивности, в вашем случае это Service.Проще говоря, onRequestPermissionsResult - это метод в классе Activity, поэтому его можно использовать только в классе, который расширяет класс Activity (вы также можете использовать AppCompatActivity для совместимости).

Ограничение также подразумевает ActivityCompat.requestPermissions.Первый параметр имеет тип Activity, а не Context .Passing Activity obj напрямую, для requestPermissions, в Service не является отличной идеей и плохой практикой, поскольку он может привести к утечкам памяти и проблемам отладки.

Переместите свой запрос на разрешение и код обработки ответа в поле Активность и запросите разрешения в активности.

...