ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【每日学点鸿蒙知识】文件读写、屏幕宽度亮度、扫一扫权限、编码器问题、wl [打印本页]

作者: 郭卫东    时间: 前天 03:01
标题: 【每日学点鸿蒙知识】文件读写、屏幕宽度亮度、扫一扫权限、编码器问题、wl
1、参照文档,在操作文件时,读取不到内容或出现步伐闪退?

参照文档,进行文件写入和读取时,出现读取不到或闪退
  1. export function createFile() {
  2.   // 获取应用文件路径
  3.   let context = getContext(this) as common.UIAbilityContext;
  4.   let filesDir = context.filesDir;
  5.   // 新建并打开文件
  6.   let file = fs.openSync(filesDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  7.   // 写入一段内容至文件
  8.   let content = "static
复制代码
存储类指示编译器在步伐的生命周期内保持局部变量的存在,而不必要在每次它进入和脱离作用域时进行创建和销毁,因此使用static修饰局部变量可以在函数调用之间保持局部变量的值register 用于定义存储在寄存器中而不是RAM中的局部变量,不过必要留意,定义 ‘register’ 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。";
  1. let writeLen = fs.writeSync(file.fd, content);
  2. console.info("The length of str is: " + writeLen);
  3. // 从文件读取一段内容
  4. let buf = new ArrayBuffer(4096);
  5. let readLen = fs.readSync(file.fd, buf, { offset: 0 });
  6. let s = String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen)));
  7. let d = decodeURIComponent(escape(s));
  8. console.info("the content of file: " + d);
  9. // 关闭文件
  10. fs.closeSync(file);
  11. }
复制代码
上面这段代码是直接拷贝文档的,就修改了下写入内容,在执行到 let d = decodeURIComponent(escape(s)); 步伐直接闪退,每次都是。然后自己将文件操作方法写成了工具类
  1. export function getFilesDir(): string {
  2.   // 获取应用文件路径
  3.   let context = getContext(this) as common.UIAbilityContext;
  4.   return context.filesDir;
  5. }
  6. //<路径前缀>/<加密等级>/base/files/
  7. //表示 APP 内部存储的缓存目录,可读写,但是随时可能被清楚,不保证持久性,一般用作下载临时目录或者缓存目录。
  8. export function getCacheDir(): string {
  9.   let context = getContext(this) as common.UIAbilityContext;
  10.   return context.cacheDir;
  11. }
  12. //将内容写入内存中
  13. export function writeFile(fileName: string, content: string) {
  14.   // 新建并打开文件
  15.   let file = fs.openSync(getFilesDir() + "/" + fileName, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  16.   // 写入一段内容至文件
  17.   let writeLen = fs.writeSync(file.fd, content);
  18.   console.info("The length of str is: " + writeLen);
  19.   // 关闭文件
  20.   fs.closeSync(file);
  21. }
  22. //从文件中读取内容
  23. export function readFile(fileName: string) {
  24.   // 打开文件
  25.   let srcFile = fs.openSync(getFilesDir() + "/" + fileName, fs.OpenMode.READ_WRITE);
  26.   // 读取源文件内容并写入至目的文件
  27.   let bufSize = 4096;
  28.   let readSize = 0;
  29.   let buf = new ArrayBuffer(bufSize);
  30.   let readLen = fs.readSync(srcFile.fd, buf, { offset: readSize });
  31.   while (readLen > 0) {
  32.     readSize += readLen;
  33.     readLen = fs.readSync(srcFile.fd, buf, { offset: readSize });
  34.   }
  35.   let s = String.fromCodePoint.apply(null, new Uint8Array(buf));
  36.   console.log("readFile=============s==" + s);
  37.   let d = decodeURIComponent(escape(s));
  38.   console.log("readFile=============d==" + d);
  39.   // 关闭文件
  40.   fs.closeSync(srcFile);
  41. }
  42. //以流的形式读取文件
  43. export async function readIOFile(fileName: string) {
  44.   // 打开文件流
  45.   let inputStream = fs.createStreamSync(getFilesDir() + '/' + fileName, 'r+');
  46.   // 以流的形式读取源文件内容并写入目的文件
  47.   let bufSize = 4096;
  48.   let readSize = 0;
  49.   let buf = new ArrayBuffer(bufSize);
  50.   let readLen = await inputStream.read(buf, { offset: readSize });
  51.   readSize += readLen;
  52.   while (readLen > 0) {
  53.     readLen = await inputStream.read(buf, { offset: readSize });
  54.     readSize += readLen;
  55.   }
  56.   let s = String.fromCodePoint.apply(null, new Uint8Array(buf));
  57.   console.log("readFile=============s==" + s);
  58.   let d = decodeURIComponent(escape(s));
  59.   console.log("readFile=============d==" + d);
  60.   // 关闭文件流
  61.   inputStream.closeSync();
  62. }
复制代码
在执行问写入,再执行读取的时候,调用readFile方法,在执行到该方法let s = String.fromCodePoint.apply(null, new Uint8Array(buf)); s得到的不绝是"",没有内容
文件读写可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-file-access-management-V5
2、HarmonyOS 获取和设置屏幕亮度方法?

是否有获取和设置屏幕亮度接口可用, @ohos.brightness (屏幕亮度)提示找不到该模块。

退出页面时必要把屏幕设为之前的亮度,可明白为手机默认亮度,将数值设置为-1即为默认亮度。
3、调用系统扫一扫时未弹出授权提示框,是否规格云云?

默认界面扫码能力提供了默认的扫码界面,必要对系统相机权限进行预授权,调用接口时,无需再次申请相机权限但有隐私提示。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/scan-scanbarcode-V5
4、编码器的bufferQueue报错?

  1. 04-19 18:15:58.074  1611  5120 E C01401/Bufferqueue: [nodict]<514>CheckBufferConfig: width or height is greater than 0, now is w 0 h 0
  2. 04-19 18:15:58.074  1611  5120 E C01401/Bufferqueue: [nodict](HEncoderSurface) AllocBuffer: Failure [1669], Reason: Alloc failed, then <400 invalid arguments>
  3. 04-19 18:15:58.074  1611  5120 E C01401/Bufferqueue: [nodict](HEncoderSurface) RequestBuffer: Fail to alloc or map Buffer[0 0] ret: 40001000, id: 6919192313868
  4. 04-19 18:15:58.074 19365 19554 E C01401/Bufferqueue: [nodict]<115>NativeWindowRequestBuffer: API failed, please check RequestBuffer function ret:40001000, Queue Id:6919192313868
  5. 04-19 18:15:58.074 19365 19554 E A0FF00/Xhey:C:EglRenderContext: EglRenderContext::SwapBuffers: Failed to SwapBuffers on EGLSurface 1, error is EGL_SUCCESS.
复制代码
代码按照:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/video-encoding-V5形貌的走Surface模式,通过opengl 走buffer模式,通过OH_VideoEncoder_GetSurface获得nativeWindow, 通过eglCreateWindowSurface创建surface ,之后和camera的纹理进行swap, 但是bufferQueue报错。
5、无网络时跳转wlan设置页面,不绝报错暂无支持此类文件的应用?

设置页面目前已经不支持隐式跳转了
  1. bundleName:'com.example.xxx.settings' a
  2. bilityName:'com.example.xxx.settings.MainAbility',
  3. uri:'application_info_entry',    //application_settings
复制代码
建议把uri改成wifi_entry

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4