服务人员在启动时关闭

时间:2012-08-25 07:03:43

标签: android service broadcastreceiver

我正在尝试在启动时启动服务,但服务被强制关闭

广播接收器的代码如下

package com.android.locationservice;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyLocationBroadcastReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        Intent startServiceIntent = new Intent();
        startServiceIntent.setAction("com.android.locationservice.LocatonTraceService");
        context.startActivity(startServiceIntent);
    }
}

并且清单看起来像这样

<receiver android:name="com.android.locationservice.MyLocationBroadcastReceiver">  
    <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
    </intent-filter>  
</receiver> 


<service android:name=".LocationTraceService">
    <intent-filter>
        <action android:name="com.android.locationservice.LocationTraceService" />
    </intent-filter>    
</service>

</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

和像这样实施的服务

    package com.android.locationservice;

    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    import android.widget.TextView;
    import android.widget.Toast;

    public class LocationTraceService extends Service
    {

   @Override
   public void onCreate() {
       super.onCreate();
       Toast.makeText(this, "Service created...", Toast.LENGTH_LONG).show();      
      // Log.i(tag, "Service created...");
      // new LocationActivity("service created...");

   }




@Override
   public void onStart(Intent intent, int startId) {      
       super.onStart(intent, startId);  

       Toast.makeText(this, "Service started...", Toast.LENGTH_LONG).show();
       //new LocationActivity("service started...");
   }

   @Override
   public int onStartCommand(Intent intent, int flags, int startId)
   {


       return super.onStartCommand(intent, flags, startId);
   }
   @Override
   public void onDestroy() {
       super.onDestroy();
       Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
       //new LocationActivity("service destroyed...");
   }

   @Override
   public IBinder onBind(Intent intent) {
       return null;
   }

}

logcat是

 08-25 07:33:39.021: E/AndroidRuntime(248): FATAL EXCEPTION: main
 08-25 07:33:39.021: E/AndroidRuntime(248): java.lang.RuntimeException: Unable to start                                                     context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
 08-25 07:33:39.021: E/AndroidRuntime(248):     at    android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
 08-25 07:33:39.021: E/AndroidRuntime(248):     at android.app.ActivityThread.access$3200(ActivityThread.java:125)
 08-25 07:33:39.021: E/AndroidRuntime(248):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)

请帮助我,我是android的新手,提前谢谢。

2 个答案:

答案 0 :(得分:2)

为什么要开始服务活动,而不是服务? 正确的:

public class MyLocationBroadcastReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        startService(new Intent(context, LocatonTraceService.class));
    }
}

答案 1 :(得分:0)

我认为您在AndroidManifest.xml中缺少GPS权限

<uses-permission android:name="android.permission.ACCESS_GPS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>