簡體   English   中英

查詢藍牙設備android

[英]Querying Bluetooth Devices android

我是android的新手,我被卡住了。 對我來說,基本前提是,當打開一個應用程序時,我需要提示用戶打開藍牙。 當按“是”時,我需要自動開始掃描附近的設備。 另一個前提是我不應該使用任何按鈕來開始掃描。 當藍牙打開時,它應該自動啟動。

該代碼沒有語法錯誤。 我在邏輯上做錯了嗎?

因為當我運行該應用程序時,什么也沒發生。 它確實提示建立藍牙連接,但是在打開后,它應該自動掃描並在activity_main文件中填充listView。 這沒有發生。

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.shashineha.mybluetoothapp.MainActivity">

     <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id = "@+id/listView_Bluetooth"/>

</RelativeLayout>

mainActivity.java:

package com.example.bluetooth.bluetoothApp
import android.support.v7.app.AppCompatActivity;
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.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.example.shashineha.mybluetoothapp.R;
public class MainActivity extends AppCompatActivity {
ListView listView;
BluetoothAdapter bluetoothAdapter;
ArrayAdapter mArrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter != null) {
        if (!bluetoothAdapter.isEnabled()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(intent, 0);
        }
    }
    // Register the BroadcastReceiver
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mReceiver, filter);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(bluetoothAdapter.isEnabled())
    {
        bluetoothAdapter.startDiscovery();
    }
}

// Create a BroadcastReceiver for ACTION_FOUND
final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        listView = (ListView)findViewById(R.id.listView_Bluetooth);  
        String action = intent.getAction();
        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Add the name and address to an array adapter to show in a ListView
            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            listView.setAdapter(mArrayAdapter);
        }
    }
};


@Override
protected void onDestroy()
{
    super.onDestroy();
    unregisterReceiver(mReceiver);
    bluetoothAdapter.cancelDiscovery();
    bluetoothAdapter.disable();
}

}

androidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bluetooth.mybluetoothapp">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

請確保您已在清單中添加了這些權限。

<uses-permission android:name="android.permission.BLUETOOTH"/>
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

之后,在onCreate()以這種方式稍微改變條件

 if (!bluetoothAdapter.isEnabled()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(intent, 0);
        } else {
            bluetoothAdapter.startDiscovery();
        }

如果藍牙已經打開,它將簡單地開始掃描,而目前還沒有發生。 現在應該掃描。 還請注意

mArrayAdapter.add(device.getName() + "\\n" + device.getAddress());

一旦發現某些設備,將創建空點異常。 您可以首先簡單地檢查日志消息。 綁定適配器,因為它在開始時為空。 還要確保您有一些可以掃描的藍牙設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM