【发布时间】:2018-04-02 17:38:54
【问题描述】:
我正在尝试在启动时启动我的 kivy 应用服务。
我确定我的服务没问题,因为它在我启动我的应用程序时工作。但是在启动时我遇到了问题。
我已阅读this article 并尝试过:
package net.saband.myapp;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import org.kivy.android.PythonActivity;
public class MyBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Intent ix = new Intent(context, PythonActivity.class);
ix.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(ix);
}
}
它可以工作,但会启动应用程序而不是服务。所以我研究了一些关于 StackOverflow 的问题并为此更改了我的代码:
package net.saband.myapp;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import net.saband.myapp.ServiceMyservice;
public class MyBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Intent ix = new Intent(context, ServiceMyservice.class);
ix.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(ix);
}
}
...并得到一个错误:
10-21 19:16:44.784 1513 1569 I ActivityManager: Start proc 6334:net.saband.myapp:service_myservice/u0a116 for service net.saband.myapp/.ServiceMyservice
10-21 19:16:44.786 6334 6334 I art : Late-enabling -Xcheck:jni
10-21 19:16:44.885 6334 6334 D AndroidRuntime: Shutting down VM
10-21 19:16:44.888 6334 6334 E AndroidRuntime: FATAL EXCEPTION: main
10-21 19:16:44.888 6334 6334 E AndroidRuntime: Process: net.saband.myapp:service_myservice, PID: 6334
10-21 19:16:44.888 6334 6334 E AndroidRuntime: Theme: themes:{}
10-21 19:16:44.888 6334 6334 E AndroidRuntime: java.lang.RuntimeException: Unable to start service net.saband.myapp.ServiceMyservice@8c96929 with Intent { cmp=net.saband.myapp/.ServiceMyservice }: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
您能否解释一下出了什么问题以及我应该怎么做才能启动该服务?谢谢!
更新
应@Juggernaut 的要求,我添加了我的服务代码:
from time import sleep
if __name__ == '__main__':
while True:
print "myapp service"
sleep(5)
当我运行应用程序时它可以工作,因为应用程序调用了服务:
def __start_service(self):
if platform == 'android':
service = autoclass('net.saband.myapp.ServiceMyservice')
mActivity = autoclass('org.kivy.android.PythonActivity').mActivity
argument = ''
service.start(mActivity, argument)
更新(AndroidManifest)
这是我的 AndroidManifest.xml 中的一些字符串。
-
我有 RECEIVE_BOOT_COMPLETED 权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> -
我有接收器:
<receiver android:name=".MyBroadcastReceiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> -
我已经注册了服务:
<service android:name="net.saband.myapp.ServiceMyservice" android:process=":service_myservice" />
根据@mariachi 的建议,我尝试在接收器中更改android:enabled="true" to android:enabled="false" 并将android:exported="false" 添加到服务中。在这种情况下,设备启动时什么都不会发生:没有错误,没有服务。
【问题讨论】:
-
@Juggernaut 谢谢你的评论,但我不明白它对我有什么帮助。我试过检查 ix.getExtras() 是的,它是空的,但我不明白为什么,也不明白我应该在这里做什么?
-
也许您应该与我们分享您的服务代码
-
@Juggernaut 我已经添加了。
-
必须将 Activity 传递给
Intent,但您将Service传递给它。这就是它失败的原因,但我没有解决方案!