HarmonyOS 鸿蒙Next文件选择器如何调用?

HarmonyOS 鸿蒙Next文件选择器如何调用? 官方文档“选择文件与路径”中有提到

为给用户提供一致的文件操作体验,避免各应用提供各式各样的文件调用操作界面,降低由此带来的用户学习成本,HarmonyOS 提供了系统级的文件操作解决方案,在不同的使用场景中,用户都能够使用熟悉的界面完成打开、查找、保存文件等任务。如无特殊需求,应用应优先考虑调用系统能力,而不是重新实现相同的功能。

https://developer.harmonyos.com/cn/docs/design/des-guides/fileoperation-0000001110501588

请问以上功能如何实现,有没有对应的smaple可以参考,谢谢!


更多关于HarmonyOS 鸿蒙Next文件选择器如何调用?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

JS和Java都可以,但JS是新特性,要API Version6以上,我手机为mate30pro只支持到Version5,为了能用上把java的也学了一下,大体就下面这样,申请权限,设置文件类型等地方都很重要,和我一样的小白学一下吧,我也是试错、翻资料了3、4天才弄出来,页面布局我就不粘了,随便放个按钮、image组件就行了。

public class MainAbilitySlice extends AbilitySlice {
    private final int imgRequestCode=1123;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        requestPermissionsFromUser(new String[]{"ohos.permission.READ_USER_STORAGE"},imgRequestCode);
        //申请权限
        Component button=findComponentById(ResourceTable.Id_mybutton);
        button.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                Intent intent=new Intent();
                Operation operation=new Intent.OperationBuilder()
                        .withAction("android.intent.action.GET_CONTENT")
                        .build();
                //除了这个还可以用IntentConstance.ACTION_CHOOSE
                intent.setOperation(operation);
                intent.setType("application/*");
                //用IntentConstance时,类型经测试不支持application,但支持"image","video"等具体格式
                intent.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT);
                startAbilityForResult(intent,imgRequestCode);
            }
        });
    }
    @Override
    protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
        super.onAbilityResult(requestCode, resultCode, resultData);
        Image image=(Image)findComponentById(ResourceTable.Id_image_show) ;
        Uri result = resultData.getUri();
        DataAbilityHelper dp = DataAbilityHelper.creator(getContext());
        FileDescriptor fddd = new FileDescriptor();
        try {
            fddd=dp.openFile(result, "r");
            FileInputStream fileInputStream = new FileInputStream(fddd);
            ImageSource imageSource=ImageSource.create(fileInputStream,null);
            PixelMap pixelMap=imageSource.createPixelmap(null);
            image.setPixelMap(pixelMap);
        }catch (Exception e){
        }finally {
            return;
        }
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

哦!对了,经测试mate30pro鸿蒙2.0能用哦

更多关于HarmonyOS 鸿蒙Next文件选择器如何调用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


历时7天,翻了十几个帖子,终于找到解决办法了,我太难了。。。

开发者你好,文件选择器是手机/折叠屏/平板的系统特性暂时没有代码样例

关注,我也想知道

欢迎开发小伙伴们进来帮帮楼主

在HarmonyOS鸿蒙Next中,调用文件选择器可以通过FilePicker API实现。首先,确保在build.gradle中添加相关依赖。然后,使用FilePicker类创建实例,并配置选择类型(如图片、视频等)。通过startActivityForResult启动文件选择器,并在onActivityResult中处理用户选择的文件路径。具体代码如下:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE);

onActivityResult中获取文件路径并处理。

回到顶部