2013-03-16 5 views
1

나는 (ON_BATTERY_CHANGE)을 청취하는 서비스를 가지고 있으며, 그러면 onReceive 서비스가 내 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

does() 메서드는 onReceive와 동일한 범위의 변수를 사용하는 것 같습니다. 그래서 do()의 intent 변수는 실제로 onReceive에서 전달 된 Intent 인 것으로 추측합니다.

브로드 캐스트를 보내기 전에 브로드 캐스트를 추가하여 인 텐트의 동작이 올바른지 확인하거나 단순히 onReceive 메서드에서 브로드 캐스트 인 텐트를 만들고 intent2로 이름을 지정하십시오.

+0

당신은 그 방법에 내가하고있는 로깅에 대해 이야기하고 있습니까? 'Log.e ("cccccc", "strLong h"+ strLong); // 좋은 값을 얻지 못함 // 모든 것을 확인하는 좋은 값을 얻는다 // Log.e ("cccccc", "strLong2m"+ strLong2); ' – whiteLT

+0

Log.d를 추가한다. "cccccc", intent.getAction()); android.intent.action.BATTERY_CHANGED로 기록한 다음 잘못된 의도를 보내면 –

+0

내 패키지 이름이 – whiteLT

관련 문제