Qt for Android 程序实现对华为mate30手机文件的导入打开

一、概述

     在《Qt for Android 程序实现对手机文件的导入打开和导出保存》一文中,用新建AndroidFileDialog类对于打开华为mate手机文件,但由于无法显示出“文件管理”,所以无法实现文件的导入打开,本文在参考了博客《Qt Android 调用系统文件管理》,后决定按照文中提供的方法通过Qt中嵌入Android的系统Java文件ExtendsQtNative.java和ExtendsQtWithJava.java,再通过Qt调用Java接口函数QAndroidJniObject::callStaticMethod()来调用ExtendsQtWithJava.java和相应的文件管理器Activity(fileManagerActivity),从而打开文件管理,再打开文件的思路来就解决此问题。

二、解决步骤

1、下载博客中的程序文件

   https://github.com/dragonfly1208/QtAndroidProjects/tree/AndroidFileManager

2、加载Java文件ExtendsQtNative.java和ExtendsQtWithJava.java

    在程序工程文件夹下android中\src\an\qt\extendsQtWithJava复制ExtendsQtNative.java和ExtendsQtWithJava.java文件,并在程序中加载进来。

3、添加 android-support-v4.jar 包

    在程序工程文件夹下android中\libs下,复制android-support-v4.jar和android-support-v4.jar.properties两个文件

4、修改AndroidManifest.xml的XML源码中的activity 的android::name

 <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="an.qt.extendsQtWithJava.ExtendsQtWithJava" android:label="test" android:screenOrientation="unspecified" android:launchMode="singleTop">

    将AndroidManifest.xml中原先的 android:name="org.qtproject.qt5.android.bindings.QtActivity"修改。为: android:name="an.qt.extendsQtWithJava.ExtendsQtWithJava",对应于Java文件ExtendsQtWithJava.java的路径。

5、加载filedialogextern.cpp、simpleCustomEvent.cpp、filedialogextern.h和simpleCustomEvent.h文件

    复制上述文件到程序工程文件夹下,并且加载到程序中。

6、修改filedialogextern.h和filedialogextern.cpp

     由于要获取实现文件路径和文件名,并通过connect将信号中的文件路径和文件名传递到打开文件处理函数中,所以在filedialogextern.h中需要对signals:void accepted()修改为:

signals:
    void accepted(QString paths);

   在filedialogextern.cpp中修改相应的acceped()函数为accepted(paths.at(0))。

7、在main.c中调用registerNativeMethods()函数

      具体是在main.c中分别添加如下两句:

     #include "simpleCustomEvent.h"
     registerNativeMethods();

如果没有添加,程序运行时,当打开文件程序会崩溃,显示如下错误提示:

LOGCAT: E AndroidRuntime: java.lang.UnsatisfiedLinkError: No implementation found for void an. qt.extendsQtWithJava.ExtendsQtNative.onFileManager(int,java.lang.String[])...

8、文件导入打开按钮槽函数

void NewholeWidget::importBtn_clicked()
 {
   if(!newholeTedit->toPlainText().isEmpty()) newholeTedit->clear();  //文本框中非空,则清空
   FileDialogExtern *myFileDialogExtern=new FileDialogExtern();
   myFileDialogExtern->open();
   connect(myFileDialogExtern, SIGNAL(accepted(QString)), this, 
           SLOT(openFileNameReady(QString)));
 }

9、文件打开处理函数openFileNameReady()

void NewholeWidget::openFileNameReady(QString filepaths)
 {
       QString fileName;
       int index1=filepaths.lastIndexOf('/');
       fileName=filepaths.mid(index1+1);  //提取路径中的文件名
       newholeTedit->clear();   //清空文本框
       bool fileopenflag=false;
       if (!fileName.isNull())
        {

          QFile file(filepaths);
         fileopenflag=file.open(QIODevice::ReadOnly|QIODevice::Text);
          if(fileopenflag==true)
          {
           textfiledata=file.readAll();  //读取所有文件内的数据
           newholeTedit->insertPlainText(textfiledata); //在文本框内显示

           }
        }
  }

三、运行效果

在华为手机mate30上出现文件管理,点击文件管理,找到相应的txt文件,可以打开,此程序运行在红米Note7手机上也可打开相应的txt文件。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值