新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Qt on Android:使用JNI與第三方jar包

        Qt on Android:使用JNI與第三方jar包

        作者: 時間:2016-09-12 來源:網絡 收藏

        很多朋友在論壇和QQ群里問到這個,今天有時間寫了個簡單的示例。

        本文引用地址:http://www.104case.com/article/201609/304657.htm

        功能很簡單,允許你輸入一個web頁面地址,使用Java的下載類庫下載后用QTextEdit顯示出來。

        效果展示

        初始效果如圖1所示:

        /

        圖1 useJar示例初始效果

        圖2為點擊GET按鈕后下載到對應頁面的效果:

        /

        圖2 下載頁面成功

        下載部分,為了顯示如何使用jar包,我用了asynchttpclient,參考我的博文:Android開源框架AsyncHttpClient (android-async-http)使用。

        項目創建

        參考《Qt on Android:圖文詳解Hello World全過程》吧,沒什么特別可說的。

        pro文件內添加“QT += androidextras”。

        創建一個AndroidManifest,package命名為an.qt.useJar。

        版權所有:foruok。轉載請注明出處:http://blog.csdn.net/foruok。

        添加Java源碼

        你可以任意的文本編輯器中編輯java源碼,然后通過Qt Creator項目視圖加到項目里,在其它文件那里鼠標右鍵點擊,選擇添加現有文件即可。參考下面幾張圖吧。

        /

        圖3 添加Java源碼之右鍵菜單

        /

        圖4 添加Java源文件之選擇Java源文件

        /

        圖5 添加Java源文件OK

        修改AndroidManifest,把activity標簽的android:name屬性值修改為an.qt.useJar.ExtendsQtWithJava。這是必須的,因為我們的ExtendsQtWithJava.java實現的Activity就是這個名字。

        好了,Java代碼添加結束。

        添加第三方jar包

        這個沒什么好說的,放在android/libs目錄下即可。看圖:

        /

        圖6 放jar包

        只要放好位置,Qt Creator編譯項目時就會把這個jar包打包到APK里。

        Java源碼使用jar包

        這是java編程的內容了,import包名,然后使用即可。

        源碼分析

        咱先看Java側的代碼吧。

        Java代碼

        ExtendsQtWithJava.java:

        81package an.qt.useJar;

        import java.lang.String;

        import android.content.Context;

        import android.content.Intent;

        import android.app.PendingIntent;

        import android.os.Handler;

        import android.os.Message;

        import android.util.Log;

        import android.net.ConnectivityManager;

        import android.net.NetworkInfo;

        import android.net.Uri;

        import android.location.Criteria;

        import android.provider.Settings;

        import android.os.Bundle;

        import android.os.Environment;

        import java.io.File;

        import com.loopj.android.http.AsyncHttpClient;

        import com.loopj.android.http.AsyncHttpResponseHandler;

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

        {

        private static ExtendsQtWithJava m_instance;

        private final static String TAG = extendsQt;

        private static String m_pageUri = null;

        private static Handler m_handler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

        switch (msg.what) {

        case 1:

        if(m_pageUri == null){

        m_pageUri = (String)msg.obj;

        m_instance.downloadText(m_pageUri);

        }else{

        m_instance.notifyQt(0, (String)msg.obj, Downloader is Busy now!);

        }

        break;

        };

        }

        };

        public ExtendsQtWithJava(){

        m_instance = this;

        }

        public static int networkState(){

        ConnectivityManager conMan = (ConnectivityManager) m_instance.getSystemService(Context.CONNECTIVITY_SERVICE);

        return conMan.getActiveNetworkInfo() == null ? 0 : 1;

        }

        public static AsyncHttpClient m_httpc = new AsyncHttpClient();

        public static ExtendsQtNative m_nativeNotify = null;

        public void downloadText(String uri){

        Log.d(TAG, start downloadText);

        m_httpc.get(uri, null, new AsyncHttpResponseHandler(){

        @Override

        public void onSuccess(String data){

        notifyQt(1, m_pageUri, data);

        m_pageUri = null;

        }

        @Override

        public void onFailure(Throwable e, String data){

        notifyQt(-1, m_pageUri, data);

        m_pageUri = null;

        }

        });

        }

        public static void downloadWebPage(String uri){

        Log.d(TAG, downloadWebPage);

        m_handler.sendMessage(m_handler.obtainMessage(1, uri));

        }

        private void notifyQt(int result, String uri, String data){


        上一頁 1 2 3 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 渭南市| 通道| 迭部县| 海宁市| 迁西县| 永康市| 霞浦县| 舒兰市| 镇原县| 双流县| 亳州市| 焉耆| 刚察县| 井研县| 福建省| 吉隆县| SHOW| 宁阳县| 呈贡县| 于田县| 温州市| 景德镇市| 昌平区| 溧阳市| 济宁市| 社旗县| 长垣县| 钦州市| 民权县| 桐柏县| 赣州市| 永安市| 化德县| 民丰县| 那曲县| 邹城市| 白城市| 渝中区| 菏泽市| 甘谷县| 思南县|