2012-07-19 2 views
0

Эй, я работаю над приложением, которое нужно передать переменный получить от BroadcastReceiver к классу обслуживанияAndroid не выдержали переменный от радиовещательного приемника к другому классу

У меня есть просмотреть эту How to pass value from Broadcast receiver to Activity in android? но его не работают.

Вот мой код

public class BatteryReceiver extends BroadcastReceiver { 
int batteryLevel; 
int batteryScale; 
private int status; 
private boolean isCharging; 
@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    Log.v("test battery", "battery:" + batteryLevel); 
    batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
    batteryScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0); 

    //Log.v("charging state", "state:" + isCharging); 
    status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
    isCharging = status == BatteryManager.BATTERY_STATUS_FULL||status == BatteryManager.BATTERY_STATUS_CHARGING; 

    Intent service = new Intent(context, MyService.class);  
    service.putExtra("BatteryLevel", batteryLevel); 
    service.putExtra("BatteryScale", batteryScale); 
    service.putExtra("Charging", isCharging); 
context.startService(service); 
} 

} 

класс обслуживания, чтобы получить 3 переменную

public class MyService extends Service { 
int batteryLevel; 
int batteryScale; 
private boolean isCharging; 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    batteryLevel = intent.getIntExtra("BatteryLevel", batteryLevel); 
    batteryScale = intent.getIntExtra("BatteryScale", batteryScale); 
    isCharging = intent.getBooleanExtra("Charging", isCharging); 

    Log.v("test battery", "battery:" + batteryLevel); 
    Log.v("charging state", "state:" + isCharging); 

      //other method 

      return Service.START_STICKY; 
} 

В конце журнала всегда показывают batterylevel является 0, и состояние зарядки является ложным, что означает, varibale не переходят к sercive

Как люди ведут меня, я назначил значение переменной как показано выше, но это все еще не работает

вот мой MainFest, я думаю, что там может быть что-то здесь

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

    <activity 
     android:name=".MyApp"> 
    </activity> 

    <service 
     android:name=".MyService" 
     android:enabled="true"> 
    </service> 

    <receiver 
     android:name=".BatteryReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BATTERY_CHANGED"></action> 
     </intent-filter> 
    </receiver> 

</application> 

И в приемной части возврата eclispe «экспортированный приемник не требует разрешения»

В моем приложении служба будет продолжать работать в backgroud и попытаться получить переменную от braodcastreceiver для выполнения функции

Я не уверен, какую часть я делаю неправильно, если yo u пятно ошибка plase, дайте мне знать, спасибо вам большое.

+0

Вы объявили услугу в своем AndroidManifest.xml? – pixelscreen

+0

в службе, которую вы не назначаете значения, поскольку они являются значениями по умолчанию, равными 0, если они были объектами, вы получили бы исключение nullpointer. – Tancho

+0

@Dya У меня есть вопрос, я думаю, может быть, что-то не так в моем mainfest, так как после присваивания значения он все равно не reutrn ни одного значения –

ответ

1

вы должны сделать что-то, как показано ниже, как вы можете ожидать, переменные, имеющие значение без assinging в них

batteryLevel = intent.getIntExtra("BatteryLevel", batteryLevel); 
batteryScale =  intent.getIntExtra("BatteryScale", batteryScale); 
    isCharging =  intent.getBooleanExtra("Charging", isCharging); 

и откуда приемника вызова службы.

вы должны позвонить startService(intent); // это намерение должно быть присвоено/задано в качестве значений.

intent.putExtra("BatteryLevel", batteryLevel); 
intent.putExtra("BatteryScale", batteryScale); 
intent.putExtra("Charging", isCharging); 

как в коде выше вы устанавливаете значения в намерение, но не передавая это намерение службы, звоните startService(intent); и службы принять эти значения в onstart() методы

в приемнике у настраивает имя службы, как WifiService.class, а ваше имя службы - MyService, как это возможно. сделать его единственным именем

+0

спасибо..хорошо это все еще не работает, лог-кошка все еще показывает уровень как 0 и зарядка state как false –

+0

У меня есть обновленный код выше, каким бы то ни было, он все еще не работает. Приемник может запустить службу, но услуга по-прежнему не может получить никакого значения. Я пытаюсь написать журнал в ресивере, но он вообще ничего не возвращает, массаж никогда не появляется –

+0

service.putExtra («BatteryLevel», 55) ;, сервис.putExtra («Зарядка», true); paas эти значения вручную и посмотреть, печатаются ли эти значения в Service, если они правильно напечатаны, вы передаете неправильные значения. Fron Receiver to Service – AAnkit

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