许多朋友在论坛和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){