2013-03-16 5 views
1

У меня есть услуга, которая слушает (ON_BATTERY_CHANGE), а затем служба onReceive отправляет трансляцию в My MainActivity. Проблема в том, что я как-то не могу получить их от службы до моей основной деятельности. Код: Основная деятельность:отправка намерений от службы до деятельности

public class MainActivity extends Activity 
    private BroadcastReceiver batteryReceiverService; 
    private TextView text2; 
.... 
protected void onCreate(Bundle savedInstanceState) { 
text2=(TextView)findViewById(R.id.TV_text2); 
batteryReceiverService = new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context context, Intent intent) { 

       text2.setText("left: "+intent.getStringExtra("H")+" hours "+intent.getStringExtra("M")+" minute(s)"); 
        Log.e("text2","text2 HHH " +intent.getStringExtra("H")); //log shows 0 
        Log.e("text2","text2 MMM " +intent.getStringExtra("H")); // log shows 0 
      } 
     }; 
     registerReceiver(batteryReceiverService, new IntentFilter(UltimateBatterySaverService.BROADCAST_ACTION)); 
.... 
@Override 
    protected void onDestroy() { 

     unregisterReceiver(batteryReceiverService); 
     super.onDestroy(); 
    } 

Услуги:

public class UltimateBatterySaverService extends Service { 
private Intent intent; 
    static final String BROADCAST_ACTION = "lt.whitegroup.ultimatebatterysaver"; 
    private BroadcastReceiver batteryLevelReceiver; 
.... 
public void onCreate() { 
     super.onCreate(); 
     intent = new Intent(BROADCAST_ACTION); 

    } 
@Override 
    public void onDestroy() { 
     unregisterReceiver(batteryLevelReceiver); 
     super.onDestroy(); 

    } 
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 


     batteryLevelReceiver = new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context context, Intent intent){ 

// Receiving data, calculating and etc 
averageChargingH=timeAllInHours; 
averageChargingM=timeAllInMinutes; 
// to put extras and send broadcast 
does(); 
...... 

public void does(){ 
     String strLong = Long.toString(averageChargingH); 
     String strLong2 = Long.toString(averageChargingM); 
     Log.e("cccccc","strLong h "+strLong); // getting good value not 0(everything ok) 
     Log.e("cccccc","strLong2 m"+strLong2); // getting good value not 0(everything ok) 
     intent.putExtra("H", strLong); 
     intent.putExtra("M", strLong2); 
     sendBroadcast(intent); 
    } 

Любые идеи, почему моя информация не перетекает правильно?

+0

Вы добавили эту услугу в AndroidManifest.xml? – hakiko

+0

Насколько я знаю, если мы регистрируем его в Activity, нам не нужно делать это в XML или я ошибаюсь? – whiteLT

+0

Смотрите: http://stackoverflow.com/questions/7144908/how-is-an-intent-service-declared-in-the-android-manifest – hakiko

ответ

1

Метод do(), кажется, использует переменные в той же области, что и onReceive, поэтому я предполагаю, что переменная намерения в is() на самом деле является Intent, переданной из onReceive.

Попробуйте добавить некоторые протоколирования перед отправкой широковещательной рассылки, чтобы проверить правильность действия намерения или просто создать намерение трансляции в методе onReceive и назовите его намерение2.

+0

Вы говорите об этом протоколе, который я делаю в методе? 'Log.e (" cccccc "," strLong h "+ strLong); // получение хорошего значения не 0 (все нормально) // получение хорошего значения не 0 (все нормально) ' ' Log.e («cccccc», «strLong2 m» + strLong2); ' – whiteLT

+0

add Log.d ("cccccc", intent.getAction()); и если он регистрируется как андроид.intent.action.BATTERY_CHANGED, то вы отправляете неправильное намерение –

+0

, оно зарегистрировано только как мое имя пакета – whiteLT

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