我能够在此链接中使用QT找到为Android创建服务的代码:https://github.com/bbernhard/qtandroidservices_example
但是,当我尝试使用此链接将服务代码放在另一个.so文件中时:https://www.kdab.com/qt-android-create-android-service-usis-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
======================================
server.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();
}
我也有同样的问题。我必须将结果服务器库添加到Android APK。我在build/build android apk/其他库中的qtcreator的项目设置中添加了它,然后选择了so so so so file。