2016-11-14 9 views
0

これは初めてのアンドロイドアプリの作成です。私はバックグラウンドで数えることができるサービスを作成しようとしています。サービスを受信者にブロードキャストすることを望みます。受信者が何も受け取っていないようですので、私のサービスが全く始まったかどうか分かりません。ブロードキャストが開始されない

ここで私はサービスを開始し、受信機を作成しようとするコードです:

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; 
} 

}

すべてのヘルプは高く評価され、感謝:

@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)); 
} 

そして、ここでは私のサービスクラスだが、 。

+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

受信機を登録する必要があります。あなたの活動のonStop方法

unregisterReceiver(timeReceiver) 

およびブロードキャストを送信する前に

あなたの活動の onStart方法で

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

Intent

timeBroadcaster.setAction("YOUR_ACTION"); 
+0

受信者に加えてIntentFilterが必要です。私はどのようにそれを作りますか? – Jesper

+0

@Jesper私の回答を更新しました –

+0

まだ運がありません。コードを更新しました。何かエラーを見つけられますか? – Jesper

関連する問題