Răsfoiți Sursa

Apex & drivers
增加权限检查
拆分location 初始化,增加权限检查,没有权限时不启动定位
在获取权限后启动定位,service start检查并后启动定位

Ray Zhang 7 ani în urmă
părinte
comite
3aadcb3097

+ 1 - 1
ApexDrivers/RAUtilsLibrary/build.gradle

@@ -48,7 +48,7 @@ dependencies {
     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
     implementation files('libs/bcprov-jdk15on-157.jar')
     implementation files('libs/httpmime-4.1.1.jar')
-    compile 'com.google.android.gms:play-services-location:11.0.0'
+    implementation 'com.google.android.gms:play-services-location:11.0.0'
 }
 
 

+ 55 - 17
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RAService.java

@@ -398,6 +398,7 @@ public abstract class RAService extends Service {
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         Log.d("_SERVICE", "onStartCommand");
+        initLocation();
         return super.onStartCommand(intent,flags,startId);
     }
 
@@ -483,26 +484,41 @@ public abstract class RAService extends Service {
 
 
 
-            mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
-
-            mLocationCallback = new LocationCallback() {
-                @Override
-                public void onLocationResult(LocationResult locationResult) {
-                    super.onLocationResult(locationResult);
-
-                    Log.i(TAG, "onLocationResult: " + locationResult.getLastLocation());
-//                    onNewLocation(locationResult.getLastLocation());
-                }
-            };
+            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+                // TODO: Consider calling
+                //    ActivityCompat#requestPermissions
+                // here to request the missing permissions, and then overriding
+                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
+                //                                          int[] grantResults)
+                // to handle the case where the user grants the permission. See the documentation
+                // for ActivityCompat#requestPermissions for more details.
+//                return;
+            }
+            else
+            {
 
-            createLocationRequest();
-            getLastLocation();
+                initLocation();
+//                mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
+//
+//                mLocationCallback = new LocationCallback() {
+//                    @Override
+//                    public void onLocationResult(LocationResult locationResult) {
+//                        super.onLocationResult(locationResult);
+//
+//                        Log.i(TAG, "onLocationResult: " + locationResult.getLastLocation());
+////                    onNewLocation(locationResult.getLastLocation());
+//                    }
+//                };
+//
+//                createLocationRequest();
+//                getLastLocation();
+//
+//
+//
+//                enable_locationTracing();
+            }
 
-//            HandlerThread handlerThread = new HandlerThread(TAG);
-//            handlerThread.start();
-//            mServiceHandler = new Handler(handlerThread.getLooper());
 
-            enable_locationTracing();
 
 
 //          msgFilter.addAction("REDANT.POP.GPS_ON");
@@ -546,7 +562,29 @@ public abstract class RAService extends Service {
 
     }
 
+public void initLocation()
+    {
+        if(mFusedLocationClient!=null)
+            return;
+        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
+
+        mLocationCallback = new LocationCallback() {
+            @Override
+            public void onLocationResult(LocationResult locationResult) {
+                super.onLocationResult(locationResult);
 
+                Log.i(TAG, "onLocationResult: " + locationResult.getLastLocation());
+//                    onNewLocation(locationResult.getLastLocation());
+            }
+        };
+
+        createLocationRequest();
+        getLastLocation();
+
+
+
+        enable_locationTracing();
+    }
     @Override
     public void onDestroy() {
         Log.e("_SERVICE", "onDestroy: ");

+ 5 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/ApexDriverApplication.java

@@ -28,7 +28,6 @@ import com.usai.redant.apexdrivers.receiver.ApexDriverAlarmReceiver;
 import com.usai.redant.apexdrivers.utils.OperationQueue;
 import com.usai.redant.rautils.receiver.RABroadcast;
 import com.usai.redant.rautils.utils.AESUtil;
-import com.usai.redant.rautils.utils.RAUtil;
 
 import org.json.JSONObject;
 
@@ -64,6 +63,11 @@ public class ApexDriverApplication extends Application {
 
     private OperationQueue networkQueue;
 
+    public void initLocation()
+    {
+        if(mService!=null)
+            mService.initLocation();
+    }
     private BroadcastReceiver screen_event_receiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {

+ 76 - 9
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/MainActivity.java

@@ -2,14 +2,14 @@ package com.usai.redant.apexdrivers;
 
 
 import android.Manifest;
+import android.app.AlertDialog;
 import android.app.ProgressDialog;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.drawable.BitmapDrawable;
+import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.location.Location;
 import android.net.Uri;
@@ -18,17 +18,13 @@ import android.os.Bundle;
 import android.os.IBinder;
 import android.os.PowerManager;
 import android.provider.Settings;
+import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.app.WindowDecorActionBar;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
-import android.view.View;
 import android.widget.RelativeLayout;
 
 import com.usai.redant.apexdrivers.base.BasicActivity;
@@ -164,9 +160,80 @@ public class MainActivity extends BasicActivity implements LoginFragment.LoginCa
         }
     }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
+    {
+
+        if (requestCode == RAUtil.MY_PERMISSIONS_REQUEST)
+        {
+            boolean missing=false;
+            boolean request = false;
+            for(int i=0;i<grantResults.length;i++)
+            {
+
+                if(grantResults[i]!= PackageManager.PERMISSION_GRANTED)
+                    missing=true;
+                boolean bshow= ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[i]);
+                if(bshow)
+                    request = true;
+            }
+
+            String msg=null;
+            if(request)
+                msg="Apex & Drivers needs some essential permissions.";
+            else
+                msg="Apex & Drivers will quit because missing some essential permissions.\nPlease check your system setting.";
+
+            if(missing) {
+                final boolean finalRequest = request;
+                new AlertDialog.Builder(this)
+                        .setTitle("Warning")
+                        .setMessage(msg)
+                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+//                                checkAllPermission();
+                                if (finalRequest)
+                                    checkPermissions();
+                                else
+                                    finish();
+                            }
+                        })
+
+                        .show();
+            }
+            else
+            {
+                ApexDriverApplication.sharedApplication().initLocation();
+            }
+
+            return;
+        }
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+    }
+
     private void checkPermissions() {
 
-        String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};
+//        String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};
+
+        String[] permissions = {
+//                Manifest.permission.CAMERA,
+//                Manifest.permission.VIBRATE,
+//                Manifest.permission.READ_CONTACTS,
+                Manifest.permission.READ_PHONE_STATE,
+                Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                Manifest.permission.READ_EXTERNAL_STORAGE,
+                Manifest.permission.RECEIVE_BOOT_COMPLETED,
+//                Manifest.permission.ACCESS_NETWORK_STATE,
+//                Manifest.permission.ACCESS_WIFI_STATE,
+                Manifest.permission.INTERNET,
+                Manifest.permission.ACCESS_FINE_LOCATION,
+//
+                Manifest.permission.CHANGE_CONFIGURATION
+
+
+
+        };
 
         RAUtil.checkPermissions(this,permissions);
     }