Android: попытка запустить действие BluetoothSettings Force Close с помощью NullPointerException - PullRequest
1 голос
/ 19 ноября 2010

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

Однако общий подход с startActivity(intent) заканчивается исключением 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): необработанный обработчик: из-за выхода из основного потока исключить исключение ERROR / 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 (Native Метод) ОШИБКА / 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 есть:

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";

Итак, я использую их в своем коде для подготовки этих конкретных дополнений.

Ответы [ 2 ]

16 голосов
/ 19 ноября 2010

Этот код работает для меня

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

Вам нужно проверить его на телефоне, в противном случае вы получите странные ошибки на эмуляторе (Bluetooth не поддерживается).

3 голосов
/ 17 декабря 2012

@ Зелимир, но он отображает все остальные опции, поэтому можно показывать только опцию Bluetooth

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