如何在Android上获取蓝牙MAC地址 [英] How to get Bluetooth MAC Address on Android

查看:1574
本文介绍了如何在Android上获取蓝牙MAC地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已使用以下代码获取Android上蓝牙的MAC地址:

I have used the following code to get MAC Address of Bluetooth on Android:

BluetoothAdapter ba;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
    ba = (BluetoothAdapter) getSystemService(Context.BLUETOOTH_SERVICE);
} else {
    ba = BluetoothAdapter.getDefaultAdapter();
}
Log.i("TEST", ba.getAddress());

我还向清单添加了权限:

Also, I added the permission to the Manifest:

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

但是,我的应用程序意外停止了.我的代码有什么问题?

But, I my app has stopped unexpectedly. What is wrong with my code?

使用Android 2.3.6(三星Galaxy mini)

using Android 2.3.6 (Samsung Galaxy mini)

更新:我在Class扩展的AsyncTask中使用了此代码.

Update: I have used this code inside a Class extended AsyncTask.

StackTrace :

09-04 01:09:43.671: E/AndroidRuntime(12372): FATAL EXCEPTION: AsyncTask #1
09-04 01:09:43.671: E/AndroidRuntime(12372): java.lang.RuntimeException: An error occured while executing doInBackground()
09-04 01:09:43.671: E/AndroidRuntime(12372):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.lang.Thread.run(Thread.java:1019)
09-04 01:09:43.671: E/AndroidRuntime(12372): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-04 01:09:43.671: E/AndroidRuntime(12372):    at android.os.Handler.<init>(Handler.java:121)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at android.bluetooth.BluetoothAdapter$1.<init>(BluetoothAdapter.java:1117)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:1117)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:437)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at org.radyabi.app.StepActivity$CollectDeviceCodes.doInBackground(StepActivity.java:119)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at org.radyabi.app.StepActivity$CollectDeviceCodes.doInBackground(StepActivity.java:1)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-04 01:09:43.671: E/AndroidRuntime(12372):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
09-04 01:09:43.671: E/AndroidRuntime(12372):    ... 4 more

推荐答案

此答案建议您致电BluetoothAdapter.getDefaultAdapter();在您活动的onCreate中进行初始化,因此以后的所有调用都可以正常进行.

This answer suggests that you call BluetoothAdapter.getDefaultAdapter(); in your activity's onCreate so it is initialized and any subsequent calls will go fine.

但是,要与AsynTask一起使用,必须使用runOnUiThread:

However, for using with AsynTask, you have to use runOnUiThread:

runOnUiThread(new Runnable() {
    public void run() {
        BluetoothAdapter ba;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            ba = (BluetoothAdapter) getSystemService(Context.BLUETOOTH_SERVICE);
        } else {
            ba = BluetoothAdapter.getDefaultAdapter();
        }
        Log.i("TEST", ba.getAddress());
    }
});

这篇关于如何在Android上获取蓝牙MAC地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆