广播没有开始
Broadcast doesn't get started
这是我第一次尝试创建 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));
}
这是我的服务 class:
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;
}
}
感谢任何帮助,谢谢。
您需要注册您的接收器。
在你的activity的onStart
方法中
IntentFilter filter = new IntentFilter();
filter.addAction("YOUR_ACTION");
registerReceiver(timeReceiver, filter)
在你的activity的onStop
方法中
unregisterReceiver(timeReceiver)
在发送广播之前将您的操作添加到 Intent
timeBroadcaster.setAction("YOUR_ACTION");
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" />
这是我第一次尝试创建 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));
}
这是我的服务 class:
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;
}
}
感谢任何帮助,谢谢。
您需要注册您的接收器。
在你的activity的onStart
方法中
IntentFilter filter = new IntentFilter();
filter.addAction("YOUR_ACTION");
registerReceiver(timeReceiver, filter)
在你的activity的onStop
方法中
unregisterReceiver(timeReceiver)
在发送广播之前将您的操作添加到 Intent
timeBroadcaster.setAction("YOUR_ACTION");
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" />