小编Dan*_*y19的帖子

使用JNI将字符串从java传递到c ++

我有一个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)

c++ java java-native-interface qt signals-slots

7
推荐指数
1
解决办法
4572
查看次数

从QT app(com.android.settings)打开android设置

我在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设置?

c++ qt android android-settings qtandroidextras

6
推荐指数
1
解决办法
2621
查看次数

开放街道地图(osmdroid)显示灰色瓷砖不在PC中映射

我正在使用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 android openstreetmap osmdroid android-mapview

5
推荐指数
1
解决办法
2135
查看次数

从JNI获取Java中使用的字符串

JAVA代码

下面是我的一些代码的一部分,我已经写在JAVA,正如你可以看到这是一个叫做类JC_VerificationCandidate是有两个String成员enrollmentIDseedIndex.

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)

正如您所看到的,我使用一个对象创建数组并将其提供给我的函数. …

c java java-native-interface android

4
推荐指数
1
解决办法
7935
查看次数

如何以编程方式移动mapView(osmdroid)

我有一个带有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)

java android touch-event osmdroid android-mapview

3
推荐指数
1
解决办法
2204
查看次数