基于跨设备迁移和分布式文件能力的DistributedMail分析)项目效果展示(二)多机调试注意事项如果要多机调试,必须在Tools下选择Superdevice。如果选择单个设备进行分布式操作,会出现:选择多个设备后,一定要在两台设备上分别部署应用。如果只部署一个,它将不起作用。(3)解决页面显示问题,需要注意的是由于原文件的布局问题,迁移到其他设备的页面布局有问题,迁移到其他设备的页面的确认按钮是在远程模拟器上呈现为不可见。起初这真的让我震惊。如下:百儿秦官终于属于楚国了!!!!找了半天,终于想通了,解决了。按钮被手机快捷控制栏遮住1、问题分析:要么是dialog_layout_device.xml布局有问题,把下面的组件挤出来;或者DeviceSelectDialog中创建的ListDialog设置有问题。快捷控制栏覆盖按钮。2.调整dialog_layout_device.xml布局,发现这个布局是定向布局,高度是根据权重分配的。其中ListContainer的ohos:weight="1",所以删掉这一行,设置高度为150vp(一共300vp,迁移到其他设备Text50vp,最终横向容器)(确认、占位、取消三个分量)占用100vp一共),结果如下图:3.确定是ListDialog弹窗的问题后返回DeviceSelectDialog.class进行分析(1)分析大体结构(不会实现这里,后面会分析整个工程)(2)调试控制变量,发现弹窗放在屏幕中间,可以出现取消和确认按钮。最终确定是手机快捷控制栏遮住了按键。最终的解决方案是保证ListContainer能够很好的展示便携设备,弹窗看起来更加大气。dialog_layout_device.xml只是将整体方向布局的高度改为ohos:height="400vp",将对齐改为居中。setAlignment(LayoutAlignment.CENTER);如果还想把弹窗放在底部,并且可以显示取消和确认按钮,只需要setsetAlignment(LayoutAlignment.BOTTOM);手机快捷控制栏布局文字底部留100多vp。(具体操作是去掉ListContainer的ohos:weight="1",整体布局高度可视化,即不缩放数值)最终效果:2.工程目录分析3.权限申请很明显,这里部署应用后,弹出两个权限对话框。第一个是访问图片和媒体的权限,第二个是使用多设备协作的权限。但实际上这个应用申请了六个权限:在MainAbility中的onStart()函数中:有没有想过这样一个问题:为什么只有三个权限这里是permission,还有其他三个权限,为什么这里是三个权限,但是项目演示的时候有两个确认框。原因:敏感权限的申请需要按照动态申请流程向用户申请授权。非敏感权限不涉及用户的敏感数据或危险操作,只需要在config.json中声明,应用安装后即可授权。其他三个是非敏感权限。应用动态申请权限,但是应用一开始只申请了两个权限。另一个修改本地图片和媒体的权限没有开始申请,仅此而已。//访问图片和媒体"ohos.permission.READ_USER_STORAGE",//允许不同设备之间的数据交换。《ohos.permission.DISTRIBUTED_DATASYNC》有一个权限申请的代码示例项目(Permission),接下来会进行更全面的权限学习,更全面的项目分析。获取分布式设备中的setClickAction方法,即MailEditSlice四、界面分析(重点布局)1、分析界面时,发现布局的xml文件被标记为红色,发现代码sample工程是SDKversion2.0,所以有问题。以下为示例,其他不一一列举。2.而string.json不是用来保存字符串3。moudle_mail_edit.xml的布局分析其他几个Layout组件都非常的在这里就不赘述了。五、页面排序(切片排序)1、打开MailEditSlice,发现不规范之处,关于final的添加。2、对它的分析(关于页面跨设备迁移的详细解释见我之前的文章PageAbility综合分析)6、邮件文本数据,邮件初始化,邮件数据处理bean/MailDataBean.java,用于表示邮件文本数据MailDataBean.java在MailEditSlice页面中,我们封装邮件数据并处理Param页面之间传递的信息。在MailEditSlice页面中,我们初始化邮件内容,即上面切片中fillview部分的onSaveData()和onRestoreData()方法,进行投递和恢复预处理:7.问题总结1.(未解决)如何防止弹窗不会被手机快捷栏挡住,就像官方文档给的图片一样。2.(已解决)本应用申请了6个权限,但是MainAbility中只有3个requestPermission(),而在项目demo中,一开始只有2个权限申请弹窗。作者在文中解决了权限申请部分。3.(已解决)因为版本问题(代码示例工程是SDKversion2.0,所以有问题),4.(已解决)并且字符串没有用string.json保存更多信息请访问:和华为官方Harmonyos技术社区共建https://harmonyos.51cto.com