2016-11-14 66 views
0

這是我第一次嘗試創建一個android應用程序。我正在嘗試創建一個可以在後臺統計的服務,並且我希望該服務能夠將時間廣播到接收方。雖然接收器似乎沒有收到任何東西,但我不確定我的服務是否開始。廣播還沒有開始

這裏就是我試圖啓動該服務,並創建了接收器的代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("EXAMPLE_BROADCAST"); 

    clock = (TextView) findViewById(R.id.textClock); 

    timeReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      setClock(intent.getLongExtra("counter", 0)); 
     } 
    }; 

    registerReceiver(timeReceiver,filter); 

    startService(new Intent(this, CounterService.class)); 
} 

public void setClock(long time){ 
    clock.setText(String.valueOf(time)); 
} 

這是我的服務類:

public class CounterService extends Service { 
private Handler handler; 
private long initialTime; 
private long timeInMilliseconds = 0L; 
private boolean isActive; 
Intent timeBroadcaster = new Intent("EXAMPLE_BROADCAST"); 

@Override 
public void onCreate(){ 
    super.onCreate(); 

    Runnable counter = new Runnable() { 
     @Override 
     public void run() { 
      isActive = ((PowerManager) getSystemService(Context.POWER_SERVICE)).isInteractive(); 
      if(isActive) { 
       timeInMilliseconds += 1000; 
       handler.postDelayed(this, 1000); 
      } 
      else { 
       if(timeInMilliseconds > 5000) { 
        timeInMilliseconds = 0; 
       } 
       handler.postDelayed(this, 1000); 
      } 
      timeBroadcaster.putExtra("counter", timeInMilliseconds); 
      sendBroadcast(timeBroadcaster); 
     } 
    }; 
} 


@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

}

任何幫助表示讚賞,感謝。

+0

你清單中定義的服務? –

+0

你註冊了你的接收器嗎? –

+0

@Smartiz是的,我做到了! :/ – Jesper

回答

0

Runnable接口沒有得到執行,你需要把它給一個線程。

Runnable counter = new Runnable() { 
     @Override 
     public void run() { 
      isActive = ((PowerManager) getSystemService(Context.POWER_SERVICE)).isInteractive(); 
      if(isActive) { 
       timeInMilliseconds += 1000; 
       handler.postDelayed(this, 1000); 
      } 
      else { 
       if(timeInMilliseconds > 5000) { 
        timeInMilliseconds = 0; 
       } 
       handler.postDelayed(this, 1000); 
      } 
      timeBroadcaster.putExtra("counter", timeInMilliseconds); 
      sendBroadcast(timeBroadcaster); 
     } 
    }; 

Thread thread = new Thread(counter); 
thread.start(); 

在清單還註冊服務:

<!--Register service--> 
    <service android:name="yourpackage.CounterService" /> 
0

您需要註冊您的接收器。

在你活動的onStart方法

IntentFilter filter = new IntentFilter(); 
filter.addAction("YOUR_ACTION"); 
registerReceiver(timeReceiver, filter) 

在你活動的onStop方法

unregisterReceiver(timeReceiver) 

與之前發送廣播你的動作加入到Intent

timeBroadcaster.setAction("YOUR_ACTION"); 
+0

除了接收方之外,它還需要一個IntentFilter。我應該如何創建? – Jesper

+0

@Jesper我更新了我的答案 –

+0

仍然沒有運氣。我更新了我的代碼。你能發現任何錯誤嗎? – Jesper