Android:尝试启动 BluetoothSettings Activity Force Close with NullPointerException

标签 android bluetooth settings

我正在尝试打开蓝牙设置的标准窗口(包括设备名称、可发现性等)。

但是,startActivity(intent) 的一般方法以指向 BluetoothSettings.java onCreate:135 的 NullPointerException 结束。

检查 Android 代码,我发现在第 135 行,他们从 Intent 中获得了一些额外信息。所以我准备了相同的额外内容(我在 android 核心 BluetoothDevicePicker 接口(interface)中找到的名称)并发出它——与 NullPointerException 的效果相同。

会不会是我准备的临时 Actor 名字打错了?

那么,当我像用户一样手动打开蓝牙设置时,有没有一种方法可以从系统本身提交的 Intent 中看到这些额外信息(特别是名称)?

非常感谢。

我的代码是:

Intent settingsIntent = new Intent();
settingsIntent.setClassName("com.android.settings",      com.android.settings.bluetooth.BluetoothSettings");
settingsIntent.putExtra("android.bluetooth.devicepicker.extra.LAUNCH_PACKAGE", "mypackage.bttoggle");
settingsIntent.putExtra("android.bluetooth.devicepicker.extra.DEVICE_PICKER_LAUNCH_CLASS", "mypackage.bttoggle.BluetoothWidget");
PendingIntent settingsPendingIntent = PendingIntent.getActivity(context, 0, settingsIntent, 0);
views.setOnClickPendingIntent(R.id.btnSettings, settingsPendingIntent);

这是一个小部件,所以我需要使用 PendingIntent。

此代码在运行时得到以下异常:

ERROR/AndroidRuntime(4905): Uncaught handler: thread main exiting due to uncaught exception ERROR/AndroidRuntime(4905): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.bluetooth.BluetoothSettings}: java.lang.NullPointerException ERROR/AndroidRuntime(4905): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) ERROR/AndroidRuntime(4905): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) ERROR/AndroidRuntime(4905): at android.app.ActivityThread.access$2200(ActivityThread.java:126) ERROR/AndroidRuntime(4905): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) ERROR/AndroidRuntime(4905): at android.os.Handler.dispatchMessage(Handler.java:99) ERROR/AndroidRuntime(4905): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(4905): at android.app.ActivityThread.main(ActivityThread.java:4595) ERROR/AndroidRuntime(4905): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(4905): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(4905): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) ERROR/AndroidRuntime(4905): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) ERROR/AndroidRuntime(4905): at dalvik.system.NativeStart.main(Native Method) ERROR/AndroidRuntime(4905): Caused by: java.lang.NullPointerException ERROR/AndroidRuntime(4905): at com.android.settings.bluetooth.BluetoothSettings.onCreate(BluetoothSettings.java:135) ERROR/AndroidRuntime(4905): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) ERROR/AndroidRuntime(4905): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) ERROR/AndroidRuntime(4905): ... 11 more

经过调查,发现在BluetoothSettings.java的第135行有:

public class BluetoothSettings extends PreferenceActivity
{

 ... 132 mNeedAuth = intent.getBooleanExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false);
 133 mFilterType = intent.getIntExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE, 134 BluetoothDevicePicker.FILTER_TYPE_ALL);
 135 mLaunchPackage = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_PACKAGE);
 136 mLaunchClass = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_CLASS); ...

我查看了 BluetoothDevicePicker 以找到额外的名称:

public interface BluetoothDevicePicker { public static final String EXTRA_NEED_AUTH = "android.bluetooth.devicepicker.extra.NEED_AUTH";
public static final String EXTRA_FILTER_TYPE = "android.bluetooth.devicepicker.extra.FILTER_TYPE";
public static final String EXTRA_LAUNCH_PACKAGE = "android.bluetooth.devicepicker.extra.LAUNCH_PACKAGE";
public static final String EXTRA_LAUNCH_CLASS = "android.bluetooth.devicepicker.extra.DEVICE_PICKER_LAUNCH_CLASS";

因此,我在我的代码中使用它们来准备那些特殊的额外内容。

最佳答案

这段代码对我有用

    Intent intentBluetooth = new Intent();
    intentBluetooth.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
    startActivity(intentBluetooth);     

需要在手机上测试,否则在模拟器上会出现奇怪的错误(不支持蓝牙)。

关于Android:尝试启动 BluetoothSettings Activity Force Close with NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4224450/

相关文章:

Android如何知道手电筒是否打开

android - AWS : NotAuthorizedException: Invalid login token. token 受众不正确。 (服务:AmazonCognitoIdentity

macos - Swift中的IOBluetoothDeviceSelectorController

c++ - MFC:如何创建带有列表框和多页的选项对话框?

Maven:尝试使用 settings.xml 文件中的凭据进行部署

java - 无法将 android.app.Fragment 转换为 mapping.SupportMapFragment

java - 如何通过在android中随机方向拖动4个点来在android中创建不规则四边形

java - android和PC蓝牙应用程序之间的连接

java - 当广播接收器收到消息时更新 recyclerview 上的切换按钮

ios - 根据 ios 上的开关禁用/隐藏设置