From da23e781a4ed4c37e3772d02e8000d9b006d01b9 Mon Sep 17 00:00:00 2001
From: endian11 <Dana_Lee1016@126.com>
Date: 星期二, 24 十一月 2020 17:35:49 +0800
Subject: [PATCH] 加入蓝牙扫描界面和功能 并发送蓝牙信息给远程服务进行连接;展示 蓝牙状态

---
 app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java |  194 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 162 insertions(+), 32 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java
index 223fc8b..0e77220 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java
@@ -1,25 +1,42 @@
 package safeluck.drive.evaluation.fragment;
 
+import android.app.Activity;
+import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.text.Html;
 import android.text.Spanned;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appcompat.widget.Toolbar;
+
+import com.anyun.exam.lib.AYSdk;
+
+import org.json.JSONException;
+import org.json.JSONObject;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import me.yokeyword.fragmentation.SupportFragment;
+import safeluck.drive.evaluation.Constant;
+import safeluck.drive.evaluation.MainActivity;
 import safeluck.drive.evaluation.R;
 import safeluck.drive.evaluation.adapter.AdapterBleList;
 import safeluck.drive.evaluation.bean.AYBluetoothDevice;
@@ -38,17 +55,25 @@
     public static int UPGRADE_17_AFTER = 0;
 
 
+
+
+
     private List<AYBluetoothDevice> mWifiList = new ArrayList<>();
     private PullListView mLvWifiList;
     private TextView mTvNoPro;
     private final static String TAG = BleScanFragment.class.getSimpleName();
-
+    private Toolbar mToolbar;
     private PullToRefreshLayout mPullRefreshLayout;
     private String mSelectSsid;
     private TextView mTvNotify;
     private AdapterBleList mAdapterWifiList;
     public static BleScanFragment newInstantce(){
         return new BleScanFragment();
+    }
+
+    public static BleScanFragment newInstance() {
+        BleScanFragment bleScanFragment = new BleScanFragment();
+        return bleScanFragment;
     }
 
     private void initListView() {
@@ -61,23 +86,26 @@
                 mAdapterWifiList.setList(mWifiList);
             }
 
-            if (mWifiList.isEmpty()) {
-                mTvNotify.setClickable(true);
-                Spanned spanned = Html.fromHtml(getString(R.string.auto_act_to_refresh) + "<font color=\'#00ADEF\'>浣跨敤甯姪</font>");
-                mTvNotify.setText(spanned);
-                mTvNoPro.setVisibility(View.VISIBLE);
 
-            } else {
-                mTvNotify.setClickable(false);
-                mTvNoPro.setVisibility(View.GONE);
-                mTvNotify.setText(getString(R.string.auto_act_to_select));
-            }
         }
     }
     /**
      * 鍒濆鍖栧垪琛�
      */
     private void initView(View view) {
+
+        mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
+        mToolbar.setTitle("钃濈墮鎵弿");
+        if (HomeFragment.class.getSimpleName().equals(getTopFragment().getClass().getSimpleName())){
+            ((MainActivity)_mActivity).viewtitle.setVisibility(View.VISIBLE);
+            ((MainActivity)_mActivity).btn_return.setVisibility(View.VISIBLE);
+
+        }else{
+            ((MainActivity)_mActivity).viewtitle.setVisibility(View.GONE);
+            ((MainActivity)_mActivity).btn_return.setVisibility(View.GONE);
+        }
+        initToolbarNav(mToolbar);
+
         mLvWifiList = (PullListView) view.findViewById(R.id.lv_wifi_list);
         mTvNotify = (TextView) view.findViewById(R.id.tv_notify);
         mTvNoPro = (TextView)view. findViewById(R.id.tv_no_pro);
@@ -87,8 +115,25 @@
         mPullRefreshLayout.setOnRefreshListener(this);
         mTvNotify.setOnClickListener(this);
 
+        initListView();
 
+    }
+    protected void initToolbarNav(Toolbar toolbar) {
+        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
+        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
 
+                pop();
+            }
+        });
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        ((MainActivity)_mActivity).viewtitle.setVisibility(View.VISIBLE);
+        ((MainActivity)_mActivity).btn_return.setVisibility(View.VISIBLE);
     }
 
     @Nullable
@@ -101,7 +146,27 @@
 
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+         AYBluetoothDevice by =mWifiList.get(position);
+         if (by != null){
+             BluetoothDevice ble = by.getBleDevice();
+             if (ble!=null ){
+                 String name = ble.getName();
+                 if (TextUtils.isEmpty(name)){
+                     name = "鏈煡";
+                 }
+                 JSONObject jsonObject = new JSONObject();
+                 try {
+                     jsonObject.put("bluetooth_name",name);
+                     jsonObject.put("bluetooth_addr",ble.getAddress());
+                 } catch (JSONException e) {
+                     e.printStackTrace();
+                 }
 
+                 String json = jsonObject.toString();
+                 Log.i(TAG,json);
+                 AYSdk.getInstance().sendCmd(Constant.ID_MS_BLUETOOTH_NAME,json);
+             }
+         }
     }
 
     @Override
@@ -117,29 +182,10 @@
         if (mTvNoPro.getVisibility() != View.GONE) {
             mTvNoPro.setVisibility(View.GONE);
         }
-        new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                // 鍗冧竾鍒繕浜嗗憡璇夋帶浠跺埛鏂板畬姣曚簡鍝︼紒
-                mPullRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
-
-                addDatas();
-                if (mWifiList != null) {
-                    initListView();
-                } else {
-
-                }
-                Log.e(TAG, "onResume");
-            }
-        }.sendEmptyMessageDelayed(0, 1000);
-    }
-
-    private void addDatas() {
-        for (int i = 0; i < 5; i++) {
-            mWifiList.add(new AYBluetoothDevice("123"+i));
-        }
+        BluetoothManager.getInstance().startDiscovery();
 
     }
+
 
     @Override
     public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
@@ -155,4 +201,88 @@
     public void onClick(View v) {
 
     }
+private IntentFilter filter;
+    private BroadcastReceiver receiver;
+    @Override
+    public void onResume() {
+        super.onResume();
+        Log.i(TAG,"onResume");
+//骞挎挱杩囨护
+        filter = new IntentFilter();
+        filter.addAction(BluetoothDevice.ACTION_FOUND);
+        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
+        filter.setPriority(Integer.MAX_VALUE);//璁剧疆骞挎挱鐨勪紭鍏堢骇鏈�澶�
+
+        receiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                try{
+                    String action = intent.getAction();
+                    Log.e(TAG,"鎺ユ敹鍒拌摑鐗欏箍鎾紒" + "action = " + action);
+                    switch (action) {
+                        case BluetoothDevice.ACTION_FOUND:
+                            final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                            if (device.getName() != null && device != null) {
+                                Log.i(TAG, "device Name: " + device.getName());
+                                Log.i(TAG, "device Addr: " + device.getAddress());
+
+                                _mActivity.runOnUiThread(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        Log.e(TAG, "寮�濮嬫坊鍔犺澶囷紒");
+                                        mWifiList.add(new AYBluetoothDevice(device));
+                                        mAdapterWifiList.notifyDataSetChanged();
+                                    }
+                                });
+                            }
+                            break;
+                        case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
+                            System.out.println("ACTION_DISCOVERY_FINISHED");
+                            Log.e(TAG, "鎵弿瀹屾垚锛�");
+                            new Handler() {
+                                @Override
+                                public void handleMessage(Message msg) {
+                                    // 鍗冧竾鍒繕浜嗗憡璇夋帶浠跺埛鏂板畬姣曚簡鍝︼紒
+                                    mPullRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
+
+
+
+                                }
+                            }.sendEmptyMessageDelayed(0, 100);
+//                            if (mActivity instanceof Activity) {
+//                                mActivity.runOnUiThread(new Runnable() {
+//                                    @Override
+//                                    public void run() {
+//                                        Log.e(TAG, "finished 寮�濮嬫坊鍔犺澶囷紒");
+//                                        Set<BluetoothDevice> paired = adapter.getBondedDevices();
+//                                        Log.e(TAG, "paired = " + paired);
+//                                        if (paired != null && paired.size() > 0) {
+//                                            for (BluetoothDevice bonded : paired) {
+//                                                if (mlist.indexOf(bonded) == -1) {
+//                                                    mlist.add(bonded);
+//                                                    deviceAdapter.notifyDataSetChanged();
+//                                                }
+//                                            }
+//                                        }
+//                                        Log.e(TAG, "鎵弿瀹屾垚鍚庣殑list: " + mlist);
+//                                    }
+//                                });
+//                            }
+//                            Log.e(TAG, "鎵弿瀹屾垚鍚庣殑list: " + mlist);
+                            break;
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        };
+        //娉ㄥ唽钃濈墮鎼滅储缁撴灉鐨剅eceiver(receiver, filter);
+        _mActivity.registerReceiver(receiver,filter);
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        _mActivity.unregisterReceiver(receiver);
+    }
 }

--
Gitblit v1.8.0