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