Неявный Broadcast Reciever не звонит - PullRequest
0 голосов
/ 03 июня 2018

Я много раз искал в Интернете, и я не понимаю, почему не работает моя пользовательская трансляция.

<receiver
        android:name=".myservice.MyReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            <action android:name="android.intent.action.BATTERY_CHANGED"/>
            <action android:name="android.intent.action.SCREEN_ON" />
            <action android:name="android.intent.action.SCREEN_OFF" />
        </intent-filter>
</receiver>

Я не получаю ее при повторном подключении и отключении зарядного устройства.

Я сделал это для упрощения дела

public class MyReceiver extends BroadcastReceiver
{
   @Override
   public void onReceive(Context context, Intent intent)
   {
       Toast.makeText(context,"Battery", Toast.LENGTH_SHORT).show();
       Log.i("Recive", "Yes");
   }
}

1 Ответ

0 голосов
/ 03 июня 2018

Из документов :

ACTION_BATTERY_CHANGED Действие широковещания: Это липкое вещание, содержащее состояние зарядки, уровень и другую информацию о батарее.См. BatteryManager для документации по содержанию намерения.

Вы не можете получить это через компоненты, объявленные в манифестах, только явно зарегистрировавшись для этого с Context.registerReceiver ().См. ACTION_BATTERY_LOW, ACTION_BATTERY_OKAY, ACTION_POWER_CONNECTED и ACTION_POWER_DISCONNECTED для различных широковещательных сообщений, связанных с батареями, которые отправляются и могут быть получены через приемники манифеста

Таким образом, вы не можете использовать только эти BroadcastReceiver *, декальрегистрация явно из вашего контекста.

Кроме того, ваше электропитание BroadcastReceiver кажется правильным.Попробуйте разделить его на другое BroadcastReceiver, возможно, действие ACTION_BATTERY_CHANGED мешает другим действиям.

Это моя заявленная BroadcastReceiver, которую я использую, и она работает в моем приложении.

<receiver android:name=".PowerConnectionBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>
</receiver>

PowerConnectionBroadcastReceiver

public class PowerConnectionBroadcastReceiver extends BroadcastReceiver {
  private static final String TAG = "PowerRcvr";
  @Override
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
      Log.d(TAG, "Device is charging");
    } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
      Log.d(TAG, "Device is NOT charging");
    } else {
      Log.d(TAG, "Unable to check if device is charging or not");
    }
  }
}

ПРИМЕЧАНИЕ : Этот код работает на Android 8 с targetSdkVersion 25 или ниже.

В targetSdkVersion 26 или выше большая часть BroadcastReceivers не работает через Manifest из-за фоновых ограничений.Вот документация (спасибо Павлу) об этом.Так что ваш IntentFilters не будет работать.Чтобы он работал, вы можете загрузить targetSdkVersion до 25 или ниже.

...