我在多个意图上得到"未知的服务启动结果"错误

dan*_*max 0 service android android-intent

我正在尝试使用从我的活动发送的意图来调用我的服务的某些功能.

这是我从活动发送意图的方式(在UI线程中):

Intent it = new Intent(MyService.INTENT_ACTIVITY_POSITION_CHANGED);
it.setClass(getApplicationContext(), MyService.class);
it.putExtra("posPercentX", x);
it.putExtra("posPercentY", y);
startService(it);
Run Code Online (Sandbox Code Playgroud)

这就是myStartCommand在MyService中的样子:

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

       if(intent.getAction().equals(INTENT_ACTIVITY_START)){
        Toast.makeText(this,"onStartCommand ...", Toast.LENGTH_SHORT).show();
       }else if(intent.getAction().equals(INTENT_ACTIVITY_POSITION_CHANGED)){
        // here comes some code to get extras from intent
        Log.d("INTENT_ACTIVITY_POSITION_CHANGED", "x=" + posX + " y=" + posY);
        //TODO preveri
       }
       return startId;
    }
Run Code Online (Sandbox Code Playgroud)

我接到几个电话后:

ERROR/ActivityManager(52): java.lang.IllegalArgumentException: Unknown service start result: 4
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?任何的想法?

Fal*_*rri 5

为什么你认为你应该回来startId?onStartCommand()的文档是

intent 提供给startService(Intent)的Intent,如给定的那样.如果服务在其进程消失后重新启动,则它可能为null,并且之前已返回除START_STICKY_COMPATIBILITY之外的任何内容.

flags 有关此启动请求的其他数据.目前为0,START_FLAG_REDELIVERY或START_FLAG_RETRY.

startId 表示此特定启动请求的唯一整数.与stopSelfResult(int)一起使用. 返回

* The return value indicates what semantics the system should use for
Run Code Online (Sandbox Code Playgroud)

服务的当前启动状态.它可能是与START_CONTINUATION_MASK位相关的常数之一

因此,您需要返回START_STICKY或http://developer.android.com/reference/android/app/Service.html#START_CONTINUATION_MASK中的一个值