Эх сурвалжийг харах

1.完善扫描设备活动;
2.添加设备列表适配器;
3.添加设备列表布局项;
4.添加图标。

Yumin 6 жил өмнө
parent
commit
de611efc8c

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -3,7 +3,9 @@
     xmlns:tools="http://schemas.android.com/tools"
     package="cn.minbb.producttester">
 
+    <!-- 使用蓝牙设备 -->
     <uses-permission android:name="android.permission.BLUETOOTH" />
+    <!-- 管理蓝牙设备 -->
     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
 
     <application

+ 87 - 0
app/src/main/java/cn/minbb/producttester/adapter/DeviceListAdapter.java

@@ -0,0 +1,87 @@
+package cn.minbb.producttester.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import cn.minbb.producttester.R;
+
+public class DeviceListAdapter extends BaseAdapter {
+
+    // 映射数据
+    private List<ItemBean> itemBeen;
+    private LayoutInflater layoutInflater;
+
+    public DeviceListAdapter(Context context, List<ItemBean> itemBeen) {
+        layoutInflater = LayoutInflater.from(context);
+        this.itemBeen = itemBeen;
+    }
+
+    @Override
+    public int getCount() {
+        // 获取数据量
+        return itemBeen.size();
+    }
+
+    @Override
+    public Object getItem(int position) {
+        // 获取对应 ID 项对应的 Item
+        return itemBeen.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        // 获取对应项 ID
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder viewHolder;
+        if (convertView == null) {
+            // 将 XML 转化为 View ,并不涉及到具体的布局,所以第二个参数通常设置为 null
+            convertView = layoutInflater.inflate(R.layout.item_device_list, parent, false);
+            viewHolder = new ViewHolder(convertView);
+            convertView.setTag(viewHolder);
+        } else {
+            viewHolder = (ViewHolder) convertView.getTag();
+        }
+        // 取出 ItemBean 对象
+        ItemBean itemBean = itemBeen.get(position);
+        // 设置控件数据
+        viewHolder.deviceName.setText(itemBean.deviceName);
+        viewHolder.deviceAddress.setText(itemBean.deviceAddress);
+        return convertView;
+    }
+
+    // ViewHolder 用于缓存控件
+    class ViewHolder {
+
+        @BindView(R.id.deviceName)
+        TextView deviceName;
+        @BindView(R.id.deviceAddress)
+        TextView deviceAddress;
+
+        ViewHolder(View view) {
+            ButterKnife.bind(this, view);
+        }
+    }
+
+    public static class ItemBean {
+
+        String deviceName;
+        String deviceAddress;
+
+        public ItemBean(String deviceName, String deviceAddress) {
+            this.deviceName = deviceName;
+            this.deviceAddress = deviceAddress;
+        }
+    }
+}

+ 52 - 1
app/src/main/java/cn/minbb/producttester/views/ScanDeviceActivity.java

@@ -4,23 +4,34 @@ import android.animation.ObjectAnimator;
 import android.animation.ValueAnimator;
 import android.annotation.SuppressLint;
 import android.app.ProgressDialog;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.annotation.Nullable;
 import android.support.v7.app.AppCompatActivity;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.animation.AccelerateInterpolator;
+import android.widget.AdapterView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
+import android.widget.Toast;
 
 import com.joanzapata.iconify.widget.IconTextView;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
 import cn.minbb.producttester.R;
+import cn.minbb.producttester.adapter.DeviceListAdapter;
 import cn.minbb.producttester.controls.FoldingLayout;
 import cn.minbb.producttester.controls.OnFoldListener;
 import cn.minbb.producttester.ctrl.App;
@@ -48,15 +59,48 @@ public class ScanDeviceActivity extends AppCompatActivity {
 
     private ProgressDialog dialog;
 
+    private BluetoothAdapter adapter;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_scan_device);
         ButterKnife.bind(this);
 
+        initView();
+        setListener();
+        loadData();
+    }
+
+    private void initView() {
         App.setupActionBar(this);
     }
 
+    private void setListener() {
+        matchList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+            }
+        });
+    }
+
+    private void loadData() {
+        // 检查设备是否支持蓝牙
+        adapter = BluetoothAdapter.getDefaultAdapter();
+        if (adapter == null) {
+            // 设备不支持蓝牙
+            Toast.makeText(ScanDeviceActivity.this, "设备不支持蓝牙", Toast.LENGTH_LONG).show();
+            ScanDeviceActivity.this.finish();
+        }
+        List<DeviceListAdapter.ItemBean> matchItemBeanList = new ArrayList<>();
+        Set<BluetoothDevice> devices = adapter.getBondedDevices();
+        for (BluetoothDevice device : devices) {
+            matchItemBeanList.add(new DeviceListAdapter.ItemBean(device.getName(), device.getAddress()));
+            System.out.println("name = " + device.getName());
+        }
+        matchList.setAdapter(new DeviceListAdapter(this, matchItemBeanList));
+    }
+
     public static void start(Context context) {
         Intent starter = new Intent(context, ScanDeviceActivity.class);
         context.startActivity(starter);
@@ -143,7 +187,7 @@ public class ScanDeviceActivity extends AppCompatActivity {
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        menu.add(0, 0, 0, "扫描").setIcon(R.drawable.ic_search_black_24dp).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+        menu.add(0, 0, 0, "扫描").setIcon(R.drawable.ic_search_white_24dp).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         return super.onCreateOptionsMenu(menu);
     }
 
@@ -154,6 +198,13 @@ public class ScanDeviceActivity extends AppCompatActivity {
                 ScanDeviceActivity.this.finish();
                 break;
             case 0:
+                // 打开蓝牙
+                if (!adapter.isEnabled()) {
+                    Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
+                    // 设置蓝牙可见性,最多 300 秒
+                    intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
+                    ScanDeviceActivity.this.startActivity(intent);
+                }
                 break;
         }
         return super.onOptionsItemSelected(item);

+ 5 - 0
app/src/main/res/drawable/ic_search_white_24dp.xml

@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
+</vector>

+ 6 - 2
app/src/main/res/layout/activity_scan_device.xml

@@ -58,6 +58,8 @@
                     android:layout_height="wrap_content"
                     android:layout_gravity="end"
                     android:layout_marginTop="8dp"
+                    android:layout_marginEnd="8dp"
+                    android:layout_marginRight="8dp"
                     android:layout_marginBottom="8dp"
                     android:text="{fa-chevron-down}"
                     app:layout_constraintBottom_toBottomOf="parent"
@@ -74,7 +76,7 @@
 
                 <ListView
                     android:id="@+id/matchList"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content" />
 
             </cn.minbb.producttester.controls.FoldingLayout>
@@ -128,6 +130,8 @@
                     android:layout_height="wrap_content"
                     android:layout_gravity="end"
                     android:layout_marginTop="8dp"
+                    android:layout_marginEnd="8dp"
+                    android:layout_marginRight="8dp"
                     android:layout_marginBottom="8dp"
                     android:text="{fa-chevron-down}"
                     app:layout_constraintBottom_toBottomOf="parent"
@@ -144,7 +148,7 @@
 
                 <ListView
                     android:id="@+id/searchList"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content" />
 
             </cn.minbb.producttester.controls.FoldingLayout>

+ 31 - 0
app/src/main/res/layout/item_device_list.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/deviceName"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginTop="8dp"
+        android:text="设备名称"
+        android:textColor="@android:color/black"
+        android:textSize="18sp"
+        android:textStyle="bold"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/deviceAddress"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginTop="4dp"
+        android:text="设备地址"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/deviceName" />
+</android.support.constraint.ConstraintLayout>