我正在尝试在启动时启动服务,但服务被强制关闭
广播接收器的代码如下
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的新手,提前谢谢。
答案 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>