2

我能够在此链接中找到使用 Qt 为 android 创建服务的代码: https ://github.com/bbernhard/qtandroidservices_example

但是,当我尝试使用此链接将服务代码放入另一个 .so 文件时: https ://www.kdab.com/qt-android-create-android-service-using-qt/

我不再看到在我的 Android 设备后台运行的服务!而且我在任何地方都找不到这个问题的答案。如果有人能找出我的代码中的问题或分享一个正在运行的示例代码,那就太好了!

这是我的代码:

清单:(仅相关行)

<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.example.MyCustomAppActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="qtandroidservices_example"/>
</activity>

<service android:process=":qt" android:enabled="true" android:name="org.qtproject.example.MyCustomAppService">
<meta-data android:name="android.app.lib_name" android:value="server"/>

         <!-- Background running -->
         <meta-data android:name="android.app.background_running" android:value="true"/>
         <!-- Background running -->
     </service>
</application>
</manifest>

==================================================== ===========

MyCustomAppActivity.java:

package org.qtproject.example;
import org.qtproject.example.R;
import org.qtproject.qt5.android.bindings.QtActivity;
import org.qtproject.qt5.android.bindings.QtService;
import org.qtproject.example.MyCustomAppService;
import android.content.Intent;
import android.util.Log;
import android.os.Bundle;

public class MyCustomAppActivity extends QtActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
Log.i("Activity", "Starting service!");
Intent serviceIntent = new Intent(this, org.qtproject.example.MyCustomAppService.class);
startService(serviceIntent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
}

==================================================== ===== MyCustomService.java:

package org.qtproject.example;
import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;
import org.qtproject.qt5.android.bindings.QtService;
import android.util.Log;

public class MyCustomAppService extends QtService {

/** Called when the service is being created. */
@Override
public void onCreate() {
Log.i("Service", "Service created!");
super.onCreate();

}

/** The service is starting, due to a call to startService() */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("Service", "Service created!");
int ret = super.onStartCommand(intent, flags, startId);
return ret;
//return mStartMode;
}
}

==================================================== =

server.pro:

TEMPLATE = lib
TARGET = server
CONFIG += dll
QT += core
SOURCES += 
server.cpp

==========================================

服务器.cpp:

#include <QDebug>
#ifdef Q_OS_ANDROID
#include <QAndroidJniObject>
#include <QtAndroid>
#endif

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

qWarning("I am serving");
return app.exec();
}
4

1 回答 1

1

我有同样的问题。我必须将生成的服务器库添加到 Android APK。我在 QtCreator 的项目设置中的 Build/Build Android APK/Additional Libraries 下添加了它,并选择了 create so 文件。

于 2017-12-01T13:59:34.390 回答