【问题标题】:BluetoothAdapter.getDefaultAdapter() throws exceptionBluetoothAdapter.getDefaultAdapter() 抛出异常
【发布时间】:2012-07-13 10:45:27
【问题描述】:

我尝试将蓝牙添加到我的 libgdx android 项目中。 我在 Android 清单中添加了以下内容:

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

我试着跑了

   mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

在非活动类中 - 异常。 我读过该课程应该是活动课程。 好的。我已经创建了

   public class BluetoothServer extends Activity {
    ...
       public void GetBluetoothAdapter () {
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
      }
    }

我是这样运行的:

BluetoothServer.GetBluetoothAdapter()

在同一个地方再次崩溃。 我尝试了两台板载蓝牙的设备。 当然,这些设备上启用了蓝牙。 我不知道该怎么办。

谢谢。

【问题讨论】:

  • 我对好的答案说“谢谢”。我在之前的问题中找不到“接受”按钮等。

标签: android bluetooth libgdx


【解决方案1】:

如果您能找到崩溃的原因,那将有很大帮助。出于某种原因,您似乎无法访问堆栈跟踪,请至少尝试一下以查看崩溃原因:

...
try {
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
} catch (Exception e) {

    Toast toast = Toast.makeText(getApplicationContext(), e.getMessage(), 1000);
    toast.show();
}
...

【讨论】:

  • 如果这样做,我会收到编译错误“无法从静态上下文引用静态方法 GetApplicationContext()”。我不能使方法 GetMyAdapter() 非静态。它不会像 BluetoothServer.GetMyAdapter() 从另一个类中看到。而且我不确定 toast.show() 是否会起作用,因为我在 Libgdx render() 方法中工作。我将其设置为 toast.ToString() 可以显示。不幸的是,我没有为 Android 编写 Activity 应用程序的经验,只有一些 Libgdx 经验。
  • 哇。我可以看看 e.getMessage()。它说:“无法在未调用 Looper.prepare() 的线程内创建处理程序”
  • 我愚蠢地尝试了以下方法:BluetoothServer.this.runOnUiThread(new Runnable() { @Override public void run() {...=BluetoothAdapter.getDefaultAdapter(); ... 再次崩溃。
【解决方案2】:

要获取代表本地蓝牙适配器的BluetoothAdapter,在JELLY_BEAN_MR1及以下运行时,调用静态getDefaultAdapter()方法;在 JELLY_BEAN_MR2 及更高版本上运行时,请使用 BLUETOOTH_SERVICE 通过 getSystemService(String) 检索它。 Source

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 2013-05-24
    • 2011-08-20
    • 2011-05-30
    • 1970-01-01
    • 2011-02-25
    • 2012-01-24
    相关资源
    最近更新 更多