【2021-10-12】跨设备画面同步
1、【
授权代码:(config.json文件下)
】
"reqPermissions": [{"name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"},//授权获取设备信息
{"name": "ohos.permission.DISTRIBUTED_DATASYNC"}]//授权画面同步
2、【在MainAbility.java 文件下添加获取权限方法】
//申请权限
private void requestPermission(){
if (verifySelfPermission(SystemPermission.DISTRIBUTED_DATASYNC) != IBundleManager.PERMISSION_GRANTED){
requestPermissionsFromUser(new String[]{SystemPermission.DISTRIBUTED_DATASYNC},0);
}
}
3、【在MainAbilitySlice.java 文件下获取远程设备信息】
//获取远程设备信息
Button getIDBtn = (Button) findComponentById(ResourceTable.Id_getIDBtn);
getIDBtn.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//获取同一网络下的其他设备信息
List deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE);
System.out.println("共有"+deviceInfoList.size()+"台设备");
//循环当前对象
for(DeviceInfo deviceInfo:deviceInfoList){
System.out.println("设备ID"+deviceInfo.getDeviceId());
System.out.println("设备名称"+deviceInfo.getDeviceName());
System.out.println("设备类型"+deviceInfo.getDeviceType().name());
}
}
});
*【注意导入对应的包名】
4、【创建接口(在MainAbility.jav 和 MainAbilitySlice.java 两个文件 函数入口处)并生成4个接口方法】
询问是否同意授权
接口方法
5、【MainAbilitySlice.java文件下】声明两个全局变量
设置同步代码
在方法中添加获取数据的代码
【实例代码】
ability_main.xml 文件
xml version="1.0" encoding="utf-8"?>
DirectionalLayout
>
MainAbility.java 文件
package com.example.myapplicationtest;
import com.example.myapplicationtest.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.ability.IAbilityContinuation;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.IntentParams;
import ohos.bundle.IBundleManager;
import ohos.security.SystemPermission;
//接口
public class MainAbility extends Ability implements IAbilityContinuation {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
//询问是否同意获取权限
requestPermissions();
super.setMainRoute(MainAbilitySlice.class.getName());
}
//申请权限
private void requestPermissions() {
if (verifySelfPermission(SystemPermission.DISTRIBUTED_DATASYNC) != IBundleManager.PERMISSION_GRANTED){
requestPermissionsFromUser(new String[]{SystemPermission.DISTRIBUTED_DATASYNC},0);
}
}
//继承接口的方法 将 false 改为 true
@Override
public boolean onStartContinuation() {
return true;
}
@Override
public boolean onSaveData(IntentParams intentParams) {
return true;
}
@Override
public boolean onRestoreData(IntentParams intentParams) {
return true;
}
@Override
public void onCompleteContinuation(int i) {
}
}
MainAbilitySlice.java 文件
package com.example.myapplicationtest.slice;
import com.example.myapplicationtest.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.ability.IAbilityContinuation;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.IntentParams;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.TextField;
import ohos.distributedschedule.interwork.DeviceInfo;
import ohos.distributedschedule.interwork.DeviceManager;
import java.util.List;
//接口
public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuation {
//声明变量
private TextField textField;
private String showText;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//设置同步
textField = (TextField)findComponentById(ResourceTable.Id_text_helloworld);
if(showText!=null){
textField.setText(showText);
}
//获取远程设备信息
Button getIDBtn = (Button) findComponentById(ResourceTable.Id_getIDBtn);
getIDBtn.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//获取同一网络下的其他设备信息
List deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE);
System.out.println("共有"+deviceInfoList.size()+"台设备");
//循环当前对象
for(DeviceInfo deviceInfo:deviceInfoList){
System.out.println("设备ID"+deviceInfo.getDeviceId());
System.out.println("设备名称"+deviceInfo.getDeviceName());
System.out.println("设备类型"+deviceInfo.getDeviceType().name());
}
}
});
Button movBtn = (Button) findComponentById(ResourceTable.Id_movID);
movBtn.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
continueAbility();//设备协同、同步
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
public boolean onStartContinuation() {
return true;
}
@Override
public boolean onSaveData(IntentParams intentParams) {
intentParams.setParam("text",textField.getText());
return true;
}
@Override
public boolean onRestoreData(IntentParams intentParams) {
showText = String .valueOf(intentParams.getParam("text"));
return true;
}
@Override
public void onCompleteContinuation(int i) {
}
}