Android:从Intent服务启动服务

时间:2014-07-02 06:05:07

标签: android service intentservice

我在我的应用程序中运行了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>

我有一个按钮,用户可以单击以手动启动该服务,并且工作正常。只有在我希望服务自动启动时它才会起作用。

应用程序没有崩溃,因此我不会在日志中发布任何错误。

如果您需要查看更多代码,请告诉我。

干杯。

1 个答案:

答案 0 :(得分:3)

由于在onHandleIntent返回后,IntentService的Context被销毁,所以由

创建的Intent
  

Intent i = new Intent(this,MyService.class);

不再有效。

尝试通过getApplicationContext()

创建Intent
  

Intent i = new Intent(getApplicationContext(),MyService.class);

这可能会解决这个问题。