我在我的应用程序中运行了Location API的Activity Recognition Intent Service。我想在用户活动发生变化时启动服务。但我似乎无法让它发挥作用。这是我尝试过的:
在活动识别意图服务的Intent Service类中:(编辑:添加了if条件的日志。)
@Override
protected void onHandleIntent(Intent intent)
{
// Get the update
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
// Get the most probable activity from the list of activities in the update
DetectedActivity mostProbableActivity = result.getMostProbableActivity();
// Get the type of activity
int currentActivity = mostProbableActivity.getType();
if(currentActivity == DetectedActivity.IN_VEHICLE)
{
Log.w("Rakshak", "in the if condition"); <-- this gets posted.
sendNotification(); // this just send a notification that the service has started.
Intent i = new Intent(this, MyService.class);
intent.setAction("start");
startService(i); <-- this dose'nt start the service.
}
}
在清单中:
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<application
....
<service android:name="driver.rakshak.drivetrackeradmin.MyService"/>
<service android:name="driver.rakshak.drivetrackeradmin.ActivityRecognitionIntentService"/>
</application>
我有一个按钮,用户可以单击以手动启动该服务,并且工作正常。只有在我希望服务自动启动时它才会起作用。
应用程序没有崩溃,因此我不会在日志中发布任何错误。
如果您需要查看更多代码,请告诉我。
干杯。
答案 0 :(得分:3)
由于在onHandleIntent返回后,IntentService的Context被销毁,所以由
创建的IntentIntent i = new Intent(this,MyService.class);
不再有效。
尝试通过getApplicationContext()
创建IntentIntent i = new Intent(getApplicationContext(),MyService.class);
这可能会解决这个问题。