瀏覽代碼

1.修改26版本下吊起权限问题

slambb 4 年之前
父節點
當前提交
7c97c8c3dc

+ 9 - 1
app/src/main/AndroidManifest.xml

@@ -1,7 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.slam.bboxble">
-
+    <uses-permission android:name="android.permission.BLUETOOTH"/>
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
+    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
@@ -45,4 +52,5 @@
             android:enabled="true" />
     </application>
 
+
 </manifest>

+ 35 - 0
app/src/main/java/com/slam/bboxble/PermissionUtils.java

@@ -0,0 +1,35 @@
+
+
+package com.slam.bboxble;
+
+import android.content.pm.PackageManager;
+
+/**
+ * Utility class that wraps access to the runtime permissions API in M and provides basic helper
+ * methods.
+ */
+public abstract class PermissionUtils {
+
+    /**
+     * Check that all given permissions have been granted by verifying that each entry in the
+     * given array is of the value {@link PackageManager#PERMISSION_GRANTED}.
+     *
+     * @see Activity#onRequestPermissionsResult(int, String[], int[])
+     */
+    public static boolean verifyPermissions(int[] grantResults) {
+        // At least one result must be checked.
+        if (grantResults.length < 1) {
+            return false;
+        }
+
+        // Verify that each required permission has been granted, otherwise return false.
+        for (int result : grantResults) {
+            if (result != PackageManager.PERMISSION_GRANTED) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+}
+

+ 21 - 3
app/src/main/java/com/slam/bboxble/TestActivity.java

@@ -1,7 +1,10 @@
 package com.slam.bboxble;
 
+import android.Manifest;
 import android.app.Activity;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.support.v4.app.ActivityCompat;
 import android.text.method.ScrollingMovementMethod;
 import android.util.Log;
 import android.view.View;
@@ -40,6 +43,21 @@ public class TestActivity extends Activity implements View.OnClickListener {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_test);
 
+        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
+            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
+                    Manifest.permission.ACCESS_FINE_LOCATION)) {
+
+                ActivityCompat.requestPermissions(this,
+                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
+                        0);
+            } else {
+
+                // Camera permission has not been granted yet. Request it directly.
+                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
+                        8);
+            }
+        }
+
         mButtonDisconnect = this.findViewById(R.id.button_dis_connect);
         mButtonDisconnect.setOnClickListener(this);
 
@@ -189,10 +207,10 @@ public class TestActivity extends Activity implements View.OnClickListener {
     //TODO 提供接口给webview 连接设备
     /**
      * 连接蓝牙设备
-     * @param address
+     * @param name
      */
-    public void onConnect(String address) {
-        mainBluetooth.startConnectLeDevice(address);
+    public void onConnect(String name) {
+        mainBluetooth.startConnectLeDevice(name);
     }
     //写入特征值数值
     //TODO 提供接口给webview 写入数据给设备

+ 10 - 9
bboxblelib/build.gradle

@@ -4,7 +4,6 @@ android {
     compileSdkVersion 26
 
 
-
     defaultConfig {
         minSdkVersion 19
         targetSdkVersion 26
@@ -22,15 +21,17 @@ android {
         }
     }
 
+    task makeJar(type: Copy) {
+        delete 'build/libs/bboxblelib.jar'
+//        from('build/intermediates/bundles/release/')
+        from('build/intermediates/packaged-classes/release/')
+        into('build/libs/')
+        include('classes.jar')
+        rename('classes.jar', 'bboxblelib-1.1.jar')
+    }
+    makeJar.dependsOn(build)
 }
-task makeJar(type: Copy) {
-    delete 'build/libs/mySdk.jar'
-    from('build/intermediates/bundles/release/')
-    into('build/libs/')
-    include('classes.jar')
-    rename('classes.jar', 'bboxblelib.jar')
-}
-makeJar.dependsOn(build)
+
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])

+ 2 - 2
bboxblelib/src/main/java/com/slam/bboxblelib/MainBluetooth.java

@@ -27,9 +27,9 @@ public interface MainBluetooth {
 
     /**
      * 连接蓝牙设备
-     * @param address
+     * @param name
      */
-    void startConnectLeDevice(String address);
+    void startConnectLeDevice(String name);
 
     //停止搜索蓝牙设备
     void stopConnectLeDevice();

+ 7 - 5
bboxblelib/src/main/java/com/slam/bboxblelib/impl/MainBluetoothImpl.java

@@ -379,7 +379,7 @@ public class MainBluetoothImpl implements MainBluetooth {
                     String _name = device.getName();
                     if (_name != null && _name.indexOf(searName) > -1) {
                         //获取到已经连接的设备 ,进行连接操作
-                        boolean _bSuccess = mBluetoothLeService.connect(mDeviceAddress);
+                        boolean _bSuccess = mBluetoothLeService.connect( device.getAddress());
                         if (_bSuccess) {
                             mDeviceAddress = device.getAddress();
                             mDeviceName = device.getName();
@@ -426,8 +426,8 @@ public class MainBluetoothImpl implements MainBluetooth {
 
     //扫描设备,并连接
     @Override
-    public void startConnectLeDevice(String searNameTemp) {
-        searName = searNameTemp;
+    public void startConnectLeDevice(String name) {
+        searName = name;
         Class<BluetoothAdapter> bluetoothAdapterClass = BluetoothAdapter.class;//得到BluetoothAdapter的Class对象
         try {//得到连接状态的方法
             Method method = bluetoothAdapterClass.getDeclaredMethod("getConnectionState", (Class[]) null);
@@ -462,9 +462,11 @@ public class MainBluetoothImpl implements MainBluetooth {
                         }
                     }
                 }
-                //todo 如果有匹配的设备,但是没有连接的。提示需要跳转手机蓝牙页面操作
+                //todo 如果有匹配的设备,但是没有连接的。
                 if (!_bConnectSuccess) {
-                    mResponser.onFailed(BONED_NOT_CONNECTED, "匹配列表设备未连接。");
+                    //没有匹配的设备,搜索设备
+                    mBluetoothAdapter.startLeScan(mLeScanCallback);
+                    mHandler.postDelayed(mGetVersionTimeoutThread, 10000L);
                 }