我有一个Android应用程序,可以获取未读的Facebook通知和收件箱.应用程序必须在QT中完成,但我几乎不了解QT C++,因此我在java中开发了应用程序,并使用JNI从QT调用java类.这工作正常,但问题是我每次有新的Facebook通知/消息时都需要发送一个插槽(在QT端).
所以我的问题是:每分钟,如何从Java通知QT我有新消息并发送字符串?
这是我的java代码:
主类:
public class MainActivity extends FragmentActivity {
...
static public void startFacebookActivity() {
String msgTag = "FACEBOOK_APP";
try {
Activity mother = QtNative.activity();
Intent intent = new Intent(mother, MainActivity.class);
mother.startActivity(intent);
} catch (Exception e) {
Log.e(msgTag, e.toString());
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
FRAGMENT CLASS(每分钟验证是否有新的facebook消息,如果是,则假设通知QT并发送消息,以便QT能够发送一个插槽)
private static native void publishNotification(String notification);
....
if (newNotification==true)
publishNotification(responseNotification);
...
Run Code Online (Sandbox Code Playgroud)
QT方面
facebookAndroid.cpp
#include "facebookAndroid.h"
#include <QtAndroidExtras>
FacebookAndroid* FacebookAndroid::s_instance = 0;
FacebookAndroid::FacebookAndroid(QObject *parent) : QObject(parent) { s_instance = this;}
void FacebookAndroid::startAndroidFacebook() { …Run Code Online (Sandbox Code Playgroud) 我在QT有一个Android应用程序.我想从一个按钮调用android设置.
我在Java中使用了这段代码:
public void usb(View v){
Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.DevelopmentSettings");
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用QT C++调用android设置?
我正在使用osmdroid在我的应用程序中获取开放的街道地图.我用所需的jar(osmdroid)构建了我的项目,并在清单中添加了所有必需的权限.但是当我尝试在Android模拟器(adt eclipse)中调试我的应用程序时,我无法看到地图,只能看到灰色瓷砖.我的项目工作正常,因为如果我在智能手机中调试我能看到地图,问题只出在模拟器上.
我做了一些研究,但我只找到了谷歌地图解决方案的信息,但没有找到开放的街道地图(osmdroid).有人知道如何解决这个问题吗?
这是我在xml文件中显示地图的方式
<org.osmdroid.views.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="322dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true" >
</org.osmdroid.views.MapView>
Run Code Online (Sandbox Code Playgroud)
这是我的主要活动
mapView = (MapView) findViewById(R.id.mapView);
mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapView.setUseDataConnection(true);
Run Code Online (Sandbox Code Playgroud)
这些是我在清单中的权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" >
Run Code Online (Sandbox Code Playgroud)
并将罐子添加到我的构建路径中
osmdroid-android-4.2.jar
osmdroid-thrid-party-4-2.jar
slf4j-1.7.7.jar
Run Code Online (Sandbox Code Playgroud) 下面是我的一些代码的一部分,我已经写在JAVA,正如你可以看到这是一个叫做类JC_VerificationCandidate是有两个String成员enrollmentID和seedIndex.
class JC_VerificationCandidate {
public JCDSM_VerificationCandidate( String enrollmentID, String seedIndex ) {
this.enrollmentID = enrollmentID;
this.seedIndex = seedIndex;
}
public String enrollmentID;
public String seedIndex;
}
Run Code Online (Sandbox Code Playgroud)
这里是主要类,我有本机方法,从那里我称之为本机方法.
public class DsmLibraryTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
JCDSM_VerificationCandidate verificationCandidate[] = {new JCDSM_VerificationCandidate( "tom", "anna" )};
dsm.JDSMVerify( 123456, "http:\\www.test_url.com", bytes, verificationCandidate );
}
public native int JDSMVerify(
int someValue1,
String someValue2,
byte[] someValue3,
JC_VerificationCandidate jVerificationCandList[] );
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我使用一个对象创建数组并将其提供给我的函数. …
我有一个带有mapView,zoomIn按钮,zoomOut按钮的LinearLayout.应用程序接收touchevents,它应该管理具有给定信息(X坐标,Y坐标,触摸事件类型)的LinearLayout子项我能够使用以下代码zoomIn和ZoomOut,但我无法移动地图:
@Override
public boolean onTouch(View arg0, MotionEvent event) {
int action = event.getAction();
switch(action)
{
case MotionEvent.ACTION_DOWN:
savedTouchedX = event.getX();
savedTouchedY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
doPanning(event, mapView);
break;
case MotionEvent.ACTION_UP:
doPanning(event, mapView);
savedTouchedX = -1;
savedTouchedY = -1;
break;
default:
break;
}
return true;
}
});
//move mapView
private boolean doPanning(MotionEvent e, MapView mapView)
{
if(savedTouchedX >= 0 && savedTouchedY >= 0)
{
IGeoPoint mapCenter = mapView.getMapCenter();
GeoPoint panToCenter = new GeoPoint((int)(mapCenter.getLatitudeE6() + (e.getY() - savedTouchedY) * 1E5),(int)(mapCenter.getLongitudeE6() - …Run Code Online (Sandbox Code Playgroud)