Myservice.java
public class MyService extends Service
1.在MyService里写了BroadcastReceiver,重写了onReceive
public class AlarmReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
MyService的onCreate()注册BroadcastReceiver
public void onCreate() {
Log.d(TAG,"onCreate:");
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.ACTION_ALARM");
receiver = new AlarmReceiver();
// 注册BroadcastReceiver
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.d(TAG,"onCreate:registerReceiver");
MyService.this.registerReceiver(receiver,filter,Context.RECEIVER_EXPORTED);
}
}
2.写了一个Binder 用于调用系统接口
public class LocalBuilder extends Binder {
public long getCurrentTime() {
return System.currentTimeMillis();
}
public void setAlarm(long timeMillis) {
Log.d(TAG,"setAlarm-timeMillis:"+timeMillis);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
// 创建Intent,指向AlarmReceiver
Intent intent = new Intent(MyService.this, AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(MyService.this, 0, intent, PendingIntent.FLAG_MUTABLE);
alarmManager.set(AlarmManager.RTC_WAKEUP, timeMillis, alarmIntent);
}
}
MainActivity.java
1.点击按钮响应bindService
binding.button7.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
try {
//绑定服务
Boolean isBound = getApplicationContext().bindService(new Intent(MainActivity.this,MyService.class),serviceConnection,Context.BIND_AUTO_CREATE);
unbindService也写在了相应位置
2.实现了ServiceConnection
private ServiceConnection serviceConnection =new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG,"Service Connected");
MyService.LocalBuilder binder = (MyService.LocalBuilder) service;
isBound2 = true;
// 现在可以调用服务中的方法了
//获取当前时间
long currentTime =binder.getCurrentTime();
Log.d(TAG,"currentTime:"+currentTime);
//设置闹钟
long time =System.currentTimeMillis()+60*1000;
binder.setAlarm(time);
Log.d(TAG,"setAlarm-time:"+time);
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(TAG,"Service DisConnected");
isBound2 = false;
}
};
现象,点击按钮,可以打印到bindservice log,一直到打印setAlarm的log,但就是不进去onReceive里面 API34 AS23.1.1
QAQ找不到原因,有人帮忙看看吗