Android: попытка запустить действие BluetoothSettings Принудительное закрытие с NullPointerException - PullRequest
1 голос
/ 17 ноября 2010

Я пытаюсь открыть стандартное окно настроек Bluetooth (с именем устройства, возможностью обнаружения и т. Д.).

Однако общий подход с startActivity (намерением) заканчивается исключением NullPointerException, указывающим на BluetoothSettings.java onCreate: 135.

Проверяя код Android, я обнаружил, что в строке 135 они получают некоторые дополнения от намерения. Поэтому я готовлю те же дополнения (имена, которые я нашел в интерфейсе BluetoothDevicePicker ядра Android) и выдаю их - тот же эффект с NullPointerException.

Могут ли быть неправильные имена статистов, которые я готовлю?

Так есть ли способ увидеть эти дополнения (особенно с именами) из намерения, которое сама система отправляет, когда я вручную открываю настройки Bluetooth, действуя как пользователь?

Большое спасибо.

Мой код:

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.

Этот код получает следующее исключение во время выполнения:

ОШИБКА / AndroidRuntime (4905): обработчик Uncaught: выход основного потока из-за исключения uncaught ОШИБКА / AndroidRuntime (4905): java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.android.settings / com.android.settings.bluetooth.BluetoothSettings}: java.lang.NullPointerException ОШИБКА / AndroidRuntime (4905): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2596) ОШИБКА / AndroidRuntime (4905): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2621) ОШИБКА / AndroidRuntime (4905): на android.app.ActivityThread.access $ 2200 (ActivityThread.java:126) ОШИБКА / AndroidRuntime (4905): в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1932) ОШИБКА / AndroidRuntime (4905): на android.os.Handler.dispatchMessage (Handler.java:99) ОШИБКА / AndroidRuntime (4905): на android.os.Looper.loop (Looper.java:123) ОШИБКА / AndroidRuntime (4905): на android.app.ActivityThread.main (ActivityThread.java:4595) ОШИБКА / AndroidRuntime (4905): на java.lang.reflect.Method.invokeNative (собственный метод) ОШИБКА / AndroidRuntime (4905): в java.lang.reflect.Method.invoke (Method.java:521) ОШИБКА / AndroidRuntime (4905): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860) ОШИБКА / AndroidRuntime (4905): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) ОШИБКА / AndroidRuntime (4905): at dalvik.system.NativeStart.main (собственный метод) ОШИБКА / AndroidRuntime (4905): вызвано: java.lang.NullPointerException ОШИБКА / AndroidRuntime (4905): на com.android.settings.bluetooth.BluetoothSettings.onCreate (BluetoothSettings.java:135) ОШИБКА / AndroidRuntime (4905): на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) ОШИБКА / AndroidRuntime (4905): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2544) ОШИБКА / AndroidRuntime (4905): ... еще 11

После исследования я обнаружил, что в строке 135 в BluetoothSettings.java есть:

открытый класс BluetoothSettings расширяет 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, чтобы найти названия дополнений:

открытый интерфейс BluetoothDevicePicker { общедоступная статическая финальная строка EXTRA_NEED_AUTH = "Android.bluetooth.devicepicker.extra.NEED_AUTH"; общедоступная статическая финальная строка EXTRA_FILTER_TYPE = "Android.bluetooth.devicepicker.extra.FILTER_TYPE"; общедоступная статическая финальная строка EXTRA_LAUNCH_PACKAGE = "Android.bluetooth.devicepicker.extra.LAUNCH_PACKAGE"; общедоступная статическая финальная строка EXTRA_LAUNCH_CLASS = "Android.bluetooth.devicepicker.extra.DEVICE_PICKER_LAUNCH_CLASS";

поэтому я использую их в своем коде для подготовки этих дополнительных функций.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...