在用Qt开发android应用的时候,有一个需求是通过调用android原生接口去实现图片分享功能,原理很简单,首先在java文件中用android接口封装一个分享功能的方法,然后在C++中调用QAndroidJniObject::callStaticMethod即可。

首先,如果是一个新创建的Qt工程,需要创建一个AndroidManifest.xml文件,创建过程不再赘述,然后创建一个Java的类,继承于

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

然后定义一个公有的静态函数

   /**     * 分享功能     */     //分享单张图片    public static void shareImage(String title,                                 String path, QtActivity activity)    {        Intent share = new Intent(Intent.ACTION_SEND);        share.setType("image/png");        File file = new File(path);        share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));        activity.startActivity(Intent.createChooser(share, title));    }
其中,title是分享对话框的显示标题,path是要分享的图片的保存位置

当然,还可以分享单独的文字内容,如下

     public static void shareString(String title,                                 String content, QtActivity activity)    {        Intent share = new Intent(Intent.ACTION_SEND);        share.setType("text/plain");//分享字符串        share.putExtra(Intent.EXTRA_TEXT, content);        activity.startActivity(Intent.createChooser(share, title));    }

还可以同时分享多张图片,如下

//分享多张图片    public static void shareImages(String title,                                    String imagesPath,QtActivity activity)    {        String[] pathList = imagesPath.split("\\|"); //由于"|"是转义字符,所以不能直接写 "|"做分割        ArrayList imagesUriList = new ArrayList();        for(int i = 0 ; i < pathList.length ; ++i){            File file = new File(pathList[i]);            if(file.isFile())            {                imagesUriList.add(Uri.fromFile(file));            }        }        Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);        intent.setType("image/*");        intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imagesUriList);        intent.putExtra(Intent.EXTRA_SUBJECT, title);        activity.startActivity(Intent.createChooser(intent, title));    }

这里写得有些复杂,imagePath是从C++端传过来的图片的路径,我把多张图片路径通过字符串连接起来,并用“|”隔开,然后在java端解析字符串将其分为每一个独立的图片路径,再去分别机型分享。


接下来看看C++端的调用方式

单张图片分享

void AndroidInterface::share(const QString &title, const QString &path){    QAndroidJniObject jTitle = QAndroidJniObject::fromString(title);    QAndroidJniObject jPath = QAndroidJniObject::fromString(path);    QAndroidJniObject activity = QtAndroid::androidActivity();    QAndroidJniObject::callStaticMethod(                                            "com/lyy/test/MainActivity",                                            "shareImage",                                            "(Ljava/lang/String;Ljava/lang/String;Lorg/qtproject/qt5/android/bindings/QtActivity;)V",                                            jTitle.object(),                                            jPath.object(),                                            activity.object());}


多张图片分享

void AndroidInterface::shareImages(const QString &title, const QStringList &imagesPathList){    QString imagesPath;    foreach (QString str, imagesPathList) {       imagesPath += str + "|";    }    imagesPath = imagesPath.remove(imagesPath.size() - 1,1).trimmed();    QAndroidJniObject jTitle = QAndroidJniObject::fromString(title);    QAndroidJniObject jPathList = QAndroidJniObject::fromString(imagesPath);    QAndroidJniObject activity = QtAndroid::androidActivity();    QAndroidJniObject::callStaticMethod(                                            "com/lyy/airlink/MainActivity",                                            "shareImages",                                            "(Ljava/lang/String;Ljava/lang/String;Lorg/qtproject/qt5/android/bindings/QtActivity;)V",                                            jTitle.object(),                                            jPathList.object(),                                            activity.object());}

字符串分享调用方式类似,这里不再赘述。


更多相关文章

  1. 浅谈android的selector,背景选择器
  2. Android中String资源文件的format方法
  3. 浅谈android的selector背景选择器
  4. android位图颜色模式的问题
  5. 分享两本android电子书
  6. 浅谈android的selector,背景选择器
  7. android Glide简单使用
  8. Android(安卓)游戏开发的一些基础和个人经验
  9. [Android] 图片裁剪总结——调用系统裁剪

随机推荐

  1. Android横屏竖屏切换的问题
  2. Android(安卓)3.0 r1中文API文档(104) ―
  3. Android(安卓)CTS(兼容性测试)
  4. 开发环境搭建
  5. android:inputType标签
  6. 自定义tabhost实现
  7. Android中android:visibility的3中属性的
  8. Android知识点
  9. 【Android】Android上的Jetty
  10. 如何打包你自己的apk程序到Android里?