关于qt for android调用系统相册并加载图片的修炼之路

功能:APP上用户注册时往往会从相册中去选择一张图片,实现系统相册的调用及头像的加载

对于不了解android和JAVA的同志们来说,这是有困难的,而我就遇到了很多坑

一、网上找资料

发现有两种方式可以实现

一种是纯C++与JNI结合,可参考https://www.jianshu.com/p/d47505f27125

一种是C++调用JAVA函数,我使用了第二种

二、踩坑

2.1 参考https://blog.csdn.net/qyvlik/article/details/51225837,下载了一份源码,可以直接编译运行

2.2 将这份源码嵌入到自己的APP中报错如下:

Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=5326, uid=10327 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

意思就是权限请求失败了,调用相册需要请求安卓外部存储的读写权限

然后添加权限,如下图,其中

android.permission.READ_EXTERNAL_STORAGE与android.permission.WRITE_EXTERNAL_STORAGE是这里需要的

然后依然报错。。。

思考良久,才了解到调用android6.0后的API时是采用的动态权限设置。而恰恰demo中用的API22,而我的是API26

OK,此时有两个办法解决

一个是将API版本降到22,可解决这个问题,但是会导致无法替换以前的版本,想哭。。。(又恰恰我的APP已经有客户在用了),好吧,用第二种方式

另一个就是在添加动态权限分配功能,了解Java和android先,参考网址:

https://www.cnblogs.com/zanzg/p/9129375.html

https://blog.csdn.net/qq_22230935/article/details/53876092

选择需要的包和函数嵌入到自己的代码中

至此大功告成

三、源码

java部分,仅供参考(demo有空再写)

public class MainActivity extends org.qtproject.qt5.android.bindings.QtActivity{

    private final static String TAG = "QtFullscreen";
    private static MainActivity activity;
    public static Context sContext;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sContext = getApplicationContext();	//获取程序句柄
        setStatusBarFullTransparent();
        activity = MainActivity.this;

        /*	// 设置全屏并且状态栏悬浮程序之上
        getWindow().addFlags(WindowM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xumingyifrend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值