2015-02-03 3 views
0

Я пытался реализовать простейшие вещи, каждый раз, когда вы подключаете устройство к ресурсу питания, тост его.BrodcastReceiver ACTION_POWER_CONNETED

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

Мой boradcastreceiver класс

public class ChargingOnReceiver extends BroadcastReceiver { 
     private Activity activity; 
    public ChargingOnReceiver(Activity activity){ 
     this.activity = activity; 
    } 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
     boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 
          status == BatteryManager.BATTERY_STATUS_FULL; 

     int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; 
     boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 

     if(isCharging){ 
      if(usbCharge){ 
       Toast.makeText(activity, "Your battery are now Charging Via USB" , Toast.LENGTH_SHORT).show(); 
      }else{ 
       if(acCharge){ 
        Toast.makeText(activity, "Your battery are now Charging Via AC Plug" , Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }  
    } 
    } 

Моя mainActivity

private ChargingOnReceiver battery; 
protected void onDestroy() { 
     unregisterReceiver(battery); 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     PreferenceManager.setDefaultValues(this,R.xml.search_settings_screen,false); 
     IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     this.registerReceiver(battery, ifilter); 
    } 

Мои Manifest

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

Я работал так, как он говорит здесь:

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

Заранее спасибо!

+0

'я не могу видеть logcat' LogCat запись в довольно длинный кольцевой буфер. Нет причин, по которым вы не сможете просматривать журналы. – njzk2

+0

logcat не показывает никаких журналов, на обоих событиях POWER_CONNECTED и POWER_DISCONNECTED. , но не видя, что logcat понятен, проблема где-то с кодом –

+0

вы объявляете получателя в манифесте, поэтому активность в этом ресивере равна нулю. Используйте параметр «context», чтобы показать тост (также регистрировать в активности избыточно, выбрать один метод регистрации и придерживаться его) – njzk2

ответ

0

Вам не нужно передавать объект деятельности.
OnReceive() имеет необходимый контекст использования, что и тосты будут появляться

@Override 
public void onReceive(Context context, Intent intent) { 
    int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING 
      || status == BatteryManager.BATTERY_STATUS_FULL; 

    int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; 
    boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 

    System.out.println("isCharging:" + isCharging); 

    System.out.println("chargePlugType:" + chargePlug); 

    if (isCharging) { 
     if (usbCharge) { 
      Toast.makeText(context, "Your battery are now Charging Via USB", 
        Toast.LENGTH_SHORT).show(); 
     } else { 
      if (acCharge) { 
       Toast.makeText(context, 
         "Your battery are now Charging Via AC Plug", 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 
+0

Я сделал именно это, спасибо, это приложение не когда я подключаю устройство. любые идеи? Я подозреваю, что это может быть так, как я зарегистрирую приемник. Я изменил исходное основное действие на это 'IntentFilter ifilter = new IntentFilter (Intent. ACTION_BATTERY_CHANGED); this.registerReceiver (батарея, IFilter); ' –

+0

@sharongur Я думаю, что вы пропустили создать объект батареи ' код \t личного PowerConnectionReceiver биты. tery = new PowerConnectionReceiver(); \t @Override \t защищены недействительный OnCreate (Пачка savedInstanceState) { \t \t super.onCreate (savedInstanceState); \t \t setContentView (R.layout.activity_main); \t \t IntentFilter ifilter = новый IntentFilter (Intent.ACTION_BATTERY_CHANGED); \t \t это.registerReceiver (аккумулятор, ifilter); \t} код' – SwANDp

 Смежные вопросы

  • Нет связанных вопросов^_^