远程广播服务

远程广播服务是建立在DataTransactor之上的跨机器的远程服务,可以发送广播到对端设备以及接收对端设备发送的广播。

基本概念

RemoteBroadcastService(远程广播服务)

代表远程广播服务,服务运行在手机端和手表端,用于处理远程广播,它提供了发送远程广播、注册/注销远程广播接收器等功能。

RemoteBroadcastManager(远程广播管理器)

代表远程广播管理器,它是远程广播服务对外提供的操作接口,用户只要获取到该实例对象就可以进行处理远程广播相关操作。

RemoteBroadcastReceiver(远程广播接收器)

代表远程广播接收器,通过RemoteBroadcastManager提供的接口注册接收器可以实现接收对端设备发送的广播。

使用方法

远程设备管理服务是IWDS系统服务的子服务,使用方法遵循IWDS服务框架的使用。

ServiceClient mServiceClient = new ServiceClient(mContext,
                RemoteBroadcastManager.SERVICE_REMOTE_BROADCAST, mConnectionCallbacks);
mServiceClient.connect();

//在 mConnectionCallbacks 的回调函数onConnected中获取RemoteBroadcastManager实例
public void onConnected(ServiceClient serviceClient) {
    mRemoteBroadcastManager = (RemoteBroadcastManager) serviceClient.getServiceManagerContext();

    //注册远程广播回调接口,监听远程广播的状态。
    mRemoteBroadcastManager.registerRemoteBroadcastCallback(mRemoteBroadcastCallback);
    ... ...
}

服务接口

/**
 * 把意图广播到对端设备。该广播将被对端设备通过调用
 * {@link Context#registerReceiver(android.content.BroadcastReceiver, IntentFilter)}
 * 方法注册的广播接收器接收。
 * 
 * @param intent 需要广播的意图。
 * @see #sendRemoteBroadcast(Intent, String)
 */
public void sendRemoteBroadcast(Intent intent);

/**
 * 把意图广播到对端设备。该广播将被对端设备通过调用
 * {@link Context#registerReceiver(android.content.BroadcastReceiver, IntentFilter)}
 * 方法注册的广播接收器接收。
 * 
 * @param intent 需要广播的意图
 * @param perm 接收该广播需要的权限。
 * @see #sendRemoteBroadcast(Intent)
 */
public void sendRemoteBroadcast(Intent intent, String perm);

/**
 * 注册远程广播接收器。该接收器将接收对端设备通过调用{@link Context#sendBroadcast(Intent)}等方法发送的广播。
 * 
 * @param receiver 注册的远程广播接收器
 * @param filter 意图过滤器
 * @see #registerRemoteReceiver(RemoteBroadcastReceiver, IntentFilter, String)
 * @see #unregisterRemoteReceiver(RemoteBroadcastReceiver)
 */
public void registerRemoteReceiver(RemoteBroadcastReceiver receiver, IntentFilter filter);

/**
 * 注册远程广播接收器。该接收器将接收对端设备通过调用{@link Context#sendBroadcast(Intent)}等方法发送的广播。
 * 
 * @param receiver 注册的远程广播接收器
 * @param filter 意图过滤器
 * @param requestPermission 该广播接收需要的权限。
 * @see #registerRemoteReceiver(RemoteBroadcastReceiver, IntentFilter)
 * @see #unregisterRemoteReceiver(RemoteBroadcastReceiver)
 */
public void registerRemoteReceiver(RemoteBroadcastReceiver receiver, IntentFilter filter,
        String requestPermission);

/**
 * 注销远程广播接收器。注销后,应用将不再接收对端设备发送的符合接收条件的普通广播。
 * 
 * @param receiver 注销的远程广播接收器。
 * @see #registerRemoteReceiver(RemoteBroadcastReceiver, IntentFilter)
 * @see #registerRemoteReceiver(RemoteBroadcastReceiver, IntentFilter, String)
 */
public void unregisterRemoteReceiver(RemoteBroadcastReceiver receiver);

/**
 * 注册远程广播回调接口,该回调接口可以异步返回远程广播的状态。
 * <p>
 * 注意:一个实例只能注册一个回调接口,之后注册的接口会代替掉之前注册的接口,传入{@code null}可以注销回调接口。
 * 
 * @param callback 回调接口实例,为空则注销回调。
 */
public void registerRemoteBroadcastCallback(RemoteBroadcastCallback callback);
... ...

相关资源

远程唤醒锁服务Demo:elf/samples/RemoteBroadcastTest