您的位置 首页 电路

Qt on Android:运用JNI与第三方jar包

很多朋友在论坛和QQ群里问到这个,今天有时间写了个简单的示例。功能很简单,允许你输入一个web页面地址,使用Java的下载类库下载后用QTextEdit显示

许多朋友在论坛和QQ群里问到这个,今日有时间写了个简略的示例。

功用很简略,答应你输入一个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_SERV%&&&&&%E);

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){

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/322129.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部