Я пытаюсь открыть стандартное окно настроек 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";
поэтому я использую их в своем коде для подготовки этих дополнительных функций.
Спасибо.