hasSystemFeature ничего не возвращает - PullRequest
0 голосов
/ 02 февраля 2019

У меня странная проблема.Я реализую соединение Bluetooth в приложении для Android.В манифесте у меня есть разрешения для:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Также у меня есть следующие намерения в действии:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
    <action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
    <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
    <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Поскольку я использую службу и приемник для процесса Bluetooth в фоновом режиме, ятакже есть эти разрешения для службы:

        <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
        <action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
        <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
        <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />

Теперь внутри службы я звоню по следующему коду:

if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
   //it is true. bla bla bla
}else{
   //it is false. bla bla bla
}

Ну, я не могу понять почему, если я вхожув режиме отладки getPackageManager ничего не возвращает.Если я добавлю логическую переменную с этой строкой в ​​if, я ясно вижу, что ничего не возвращается.Фактически, это похоже на то, что код был убит в тот момент, потому что к любой другой строке в коде обращаются, но я все еще могу управлять приложением.Это потому, что из-за ошибки убивается сервис, а не само приложение?как я могу отладить это?Потому что я не вижу ни одной строки ошибки.Любая идея, откуда исходит ошибка?

РЕДАКТИРОВАТЬ: я работаю на Android 8.0

1 Ответ

0 голосов
/ 02 февраля 2019

Нечто дополнительное: функция была вызвана внутри конструктора объекта, который я вызывал из сервиса.Вам необходимо передать контекст объекту:

your_object = new your_object( getApplicationContext() );

и внутри конструктора объекта:

public class your_object{

 public your_object(Context context){
     context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...