国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Qt for Android調用原生接口打開相機拍照并存儲照片

2019-11-06 09:42:23
字體:
來源:轉載
供稿:網友

Qt開發Android應用,需求是通過調用Android原生接口去打開系統相機拍照,并返回拍攝的照片。原理很簡單,現在java文件中寫android代碼調用相機,拍照后將將相片存儲在SD卡,然后在C++ 端調用。

首先,如果是一個新創建的Qt工程,需要創建一個AndroidManifest.xml文件,創建過程不再贅述,然后創建一個Java的類,繼承于

public class MainActivity extends org.qtPRoject.qt5.android.bindings.QtActivity定義一個公有的靜態函數

	/**        *打開系統相機拍照并返回相片        */        public static void openSystemCamera(QtActivity activity){            try {                    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");//開始拍照                    m_instance.mPhotoPath = m_instance.getSDPath()+"/AirLink/"+ m_instance.getPhotoFileName();//設置圖片文件路徑,getSDPath()和getPhotoFileName()具體實現在下面                    m_instance.mPhotoFile = new File(m_instance.mPhotoPath);                    if (!m_instance.mPhotoFile.exists()) {                            m_instance.mPhotoFile.createNewFile();//創建新文件                    }                    intent.putExtra(MediaStore.EXTRA_OUTPUT,//Intent有了圖片的信息                                    Uri.fromFile(m_instance.mPhotoFile));                    activity.startActivityForResult(intent, CAMERA_RESULT);//跳轉界面傳回拍照所得數據                } catch (Exception e) {                    e.printStackTrace();                }            }        public String getSDPath(){            File sdDir = null;            boolean sdCardExist = Environment.getExternalStorageState()                            .equals(android.os.Environment.MEDIA_MOUNTED);   //判斷sd卡是否存在            if(sdCardExist)            {                    sdDir = Environment.getExternalStorageDirectory();//獲取目錄            }            return sdDir.toString();        }        private String getPhotoFileName() {            Date date = new Date(System.currentTimeMillis());            SimpleDateFormat dateFormat = new SimpleDateFormat(                            "'IMG'_yyyyMMdd_HHmmss");            return dateFormat.format(date)  +".jpg";        }      @Override      protected void onActivityResult(int requestCode, int resultCode, Intent data) {          if (requestCode == CAMERA_RESULT) {                if(resultCode != RESULT_OK){                    return;                }//                makeToast(mPhotoPath);                //m_transImageToQt.OpenCameraGetImgPath(mPhotoPath);            }      }

C++中調用接口

void AndroidInterface::openCamera(){    QAndroidJniObject activity = QtAndroid::androidActivity();    QAndroidJniObject::callStaticMethod<void>(                "com/lyy/test/MainActivity",                "openSystemCamera",                "(Lorg/qtproject/qt5/android/bindings/QtActivity;)V",                activity.object<jobject>());}

拍照完成后會進入到回調函數,在回調函數中將圖片存儲路徑傳送到C++,具體的傳送方式不再贅述,后期會專門寫文章介紹。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会宁县| 车致| 盐亭县| 简阳市| 吴旗县| 荣成市| 大荔县| 昌平区| 乐安县| 浠水县| 百色市| 鲁山县| 堆龙德庆县| 浦北县| 普宁市| 泰来县| 财经| 贵阳市| 威海市| 铁岭县| 沙田区| 全南县| 武山县| 潢川县| 濮阳市| 广饶县| 莱西市| 绥棱县| 石柱| 巍山| 工布江达县| 卢龙县| 三原县| 临江市| 遵义市| 两当县| 扬中市| 乐昌市| 西安市| 衡山县| 开封县|