首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android - ClassCastException - BluetoothManager不能转换为android.bluetooth.BluetoothAdapter错误。

Android - ClassCastException - BluetoothManager不能转换为android.bluetooth.BluetoothAdapter错误。
EN

Stack Overflow用户
提问于 2015-04-27 14:08:29
回答 4查看 1.3K关注 0票数 0

现在,我编写的一些BluetoothAdapter代码有问题。我试图确定到底是什么导致了这个问题:

代码语言:javascript
复制
04-27 08:27:35.749    7802-7802/com.engineering.yellow E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.engineering.yellow, PID: 7802
java.lang.ClassCastException: android.bluetooth.BluetoothManager cannot be cast to android.bluetooth.BluetoothAdapter
        at com.engineering.yellow.fragment.SetDevicesFragment.isNotConnected(SetDevicesFragment.java:190)
        at com.engineering.yellow.bluetooth.BluetoothConnectionTask.onPostExecute(BluetoothConnectionTask.java:117)
        at com.engineering.yellow.bluetooth.BluetoothConnectionTask.onPostExecute(BluetoothConnectionTask.java:22)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5579)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
        at dalvik.system.NativeStart.main(Native Method)

下面是我目前使用的代码:

代码语言:javascript
复制
@Override
public void isConnected() {
    Log.d(Constants.TAG, "Connected device");
    mNumDevicesConnected++;
    if (mNumDevicesConnected == mNumDevicesSelected) {
        if (mProgressDialog != null) {
            mProgressDialog.dismiss();
        }
        mBluetoothManager.startReading(getActivity());
        getActivity().setResult(Activity.RESULT_OK);
        getActivity().finish();
    }
}

@Override
public void isNotConnected() {
   BluetoothAdapter blutoothAdapter;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
        appcontext = getActivity().getApplicationContext();
        Log.i("SetDevicesFragment", "Context Val:" + appcontext);
        appcontext = getActivity().getApplicationContext();
        blutoothAdapter = (BluetoothAdapter) appcontext.getSystemService(Context.BLUETOOTH_SERVICE);
    } else {
        blutoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    Log.i("SetDevicesFragment", "SetDevicesFragment-BluetoothConnection-MACAddress: " + blutoothAdapter.getAddress());

    if (mProgressDialog != null) {
        mProgressDialog.dismiss();
    }

    //We check to make sure we still have activity access, in case the user attempted to go back
    //before we show the dialog.
    if (getActivity() != null) {
        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Dialog));
        builder.setTitle(R.string.device_connection_error_title).setMessage(R.string.device_connection_error_message)
                .setPositiveButton(R.string.auto_shutdown_dialog_session_ended_positive_button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        AlertDialog alertDialog = builder.create();
        breakExistingConnections();
        alertDialog.show();
    }
}

这是导致此ClassCastException的代码行:

代码语言:javascript
复制
blutoothAdapter = (BluetoothAdapter) appcontext.getSystemService(Context.BLUETOOTH_SERVICE);

是什么导致了这个问题?任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-27 14:14:18

例外情况是,Context.getSystemService(Context.BLUETOOTH_SERVICE)返回的是BluetoothManager,而不是BluetoothAdapter

要获得适配器,请使用BluetoothManager.getAdapter()

票数 1
EN

Stack Overflow用户

发布于 2015-04-27 14:15:24

我在这里引用正式文件

要获得表示本地蓝牙适配器的BluetoothAdapter,在JELLY_BEAN_MR1和更低级别上运行时,调用静态getDefaultAdapter()方法;在JELLY_BEAN_MR2和更高级别上运行时,使用BLUETOOTH_SERVICE通过getSystemService(String)检索它。

票数 0
EN

Stack Overflow用户

发布于 2015-04-27 14:54:11

appcontext.getSystemService(Context.BLUETOOTH_SERVICE)返回类型为BluetoothManager的对象。您正在尝试将该对象声明为投射,而不是将其声明为BluetoothAdapter,这在本例中是不可能的,因此出现了错误。幸运的是,您可以从管理器获得适配器。

要解决这个问题,只需更改以下内容:

代码语言:javascript
复制
blutoothAdapter = (BluetoothAdapter) appcontext.getSystemService(Context.BLUETOOTH_SERVICE);

对此:

代码语言:javascript
复制
blutoothAdapter = ((BluetoothManager) appcontext.getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29898089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档