色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Qt on Android:使用JNI與第三方j(luò)ar包

          Qt on Android:使用JNI與第三方j(luò)ar包

          作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://cafeforensic.com/article/201609/304657.htm

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

          效果展示

          初始效果如圖1所示:

          /

          圖1 useJar示例初始效果

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

          /

          圖2 下載頁面成功

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

          項目創(chuàng)建

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

          pro文件內(nèi)添加“QT += androidextras”。

          創(chuàng)建一個AndroidManifest,package命名為an.qt.useJar。

          版權(quán)所有:foruok。轉(zhuǎn)載請注明出處:http://blog.csdn.net/foruok。

          添加Java源碼

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

          /

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

          /

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

          /

          圖5 添加Java源文件OK

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

          好了,Java代碼添加結(jié)束。

          添加第三方j(luò)ar包

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

          /

          圖6 放jar包

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

          Java源碼使用jar包

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

          源碼分析

          咱先看Java側(cè)的代碼吧。

          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 下一頁

          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉