第十一章 Service和BroadcastReceiver

目录

1 Service简介

1.1 创建、配置Service

1.2 启动和停止Service

1.3 绑定本地Service

1.4 Service的生命周期

1.5 IntentService简介

2 电话管理器

3 短信管理器

4 音频管理器

5 手机闹钟服务

6 接收广播消息

6.1 BroadcastReceiver简介

6.2 发送广播

6.3 有序广播


1 Service简介

Service 是 Android 中一种可以在后台执行长时间运行操作的组件,即使用户不和应用进行交互,Service 也可以继续运行。常见的用例包括播放音乐,下载文件等。

1.1 创建、配置Service

创建 Service 需要继承 Service 类并实现其方法。例如:

public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 在此处执行后台任务
        return super.onStartCommand(intent, flags, startId);
    }
}

并在 AndroidManifest.xml 中声明:

<service android:name=".MyService"/>

1.2 启动和停止Service

可以通过 startService()stopService() 或者 stopSelf() 来启动和停止 Service。例如:

Intent intent = new Intent(this, MyService.class);
startService(intent);

// 当服务不再需要时
stopService(intent);
// 或在服务内部调用
stopSelf();

1.3 绑定本地Service

可以通过 bindService()unbindService() 来绑定和解绑 Service。绑定 Service 会返回一个 IBinder,可以通过它来调用 Service 中的方法。例如:

ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        // 调用服务的方法
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};
bindService(intent, connection, BIND_AUTO_CREATE);

1.4 Service的生命周期

Service 的生命周期主要有两种模式:启动和绑定。在启动模式下,onCreate()onStartCommand()onDestroy() 是主要的生命周期方法。在绑定模式下,onCreate()onBind()onUnbind()onDestroy() 是主要的生命周期方法。

1.5 IntentService简介

IntentService 是 Service 的一个子类,它使用工作线程来处理所有启动请求。适用于不需要与用户交互,并且希望完成任务后自动停止的场景。例如:

public class MyIntentService extends IntentService {
    public MyIntentService() {
        super("MyIntentService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        // 在此处理后台任务
    }
}

2 电话管理器

电话管理器(TelephonyManager)为访问与电话相关的状态提供了一组 API,包括电话信号和蜂窝网络信息、SIM 卡状态和订阅信息等。例如:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();  // 需要 READ_PHONE_STATE 权限

3 短信管理器

Android 提供了 SmsManager 类,你可以使用它来发送短信。不过需要注意的是,发送短信需要 SEND_SMS 权限。例如:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);

4 音频管理器

音频管理器(AudioManager)提供了一组管理音频和音量的 API,包括音量、模式(静音、震动等)和音频焦点等。例如:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

5 手机闹钟服务

AlarmManager 服务允许你在特定时间启动你的应用组件。常常与 PendingIntent 结合使用来启动一个 Service 或者发送一个广播。例如:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);

6 接收广播消息

6.1 BroadcastReceiver简介

BroadcastReceiver 是 Android 四大组件之一,它能接收来自系统、应用发出的广播消息。例如:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 在此处理接收到的广播
    }
}

6.2 发送广播

可以通过 sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast() 等方法发送广播。例如:

Intent intent = new Intent();
intent.setAction("com.example.MY_ACTION");
sendBroadcast(intent);

6.3 有序广播

有序广播是一种同步的广播,接收器按照优先级接收广播。可以通过 sendOrderedBroadcast() 来发送有序广播。例如:

Intent intent = new Intent();
intent.setAction("com.example.MY_ACTION");
sendOrderedBroadcast(intent, null);

猜你喜欢

转载自blog.csdn.net/m0_52537869/article/details/131238569