Intent 内容未被解析为 intentservice

Intent content is not being parsed to intentservice

我在将带有操作的意图传递给 intentservice 时遇到问题。服务可以启动,意图不为空,但操作为空。使用 putExtra 时也会出现同样的问题。

当我到达第一个断点时,我可以看到操作已被填充,但是当我到达 onHandleIntent 方法中的断点时,我的操作是空的。 该操作在 onStart 方法和 onStartCommand 方法中也已经为空。

我已经包含了我的 intentservice class 的代码。我将方法 getNewDeck 用作辅助方法,这样我就可以从各种活动中调用此方法,而无需创建意图或可能忘记某些参数。此辅助方法启动服务。但是我已经从 activity 启动了服务,但问题仍然存在,所以我认为问题不在那里。

public class MyService extends IntentService {

public static final String TAG="MyService";
public static final String MY_SERVICE_MESSAGE="myServiceMessage";
public static final String MY_SERVICE_PAYLOAD="myServicePayload";


private static final String SR_GET_NEW_DECK="getNewDeck";
private static final String SR_DRAW_CARDS_FROM_DECK="drawCardsFromDeck";

private static final String PARAM_DECK_ID="deckID";

private static final String PARAM_DRAW_CARDS_FROM_DECK_COUNT="count";



private DeckApiService deckApiService;
/**
 * Creates an IntentService.  Invoked by your subclass's constructor.
 */
public MyService() {
    super("MyService");
}



public static void getNewDeck(Context context) {
    Intent i=new Intent(context,MyService.class);
    i=i.setAction(SR_GET_NEW_DECK);
    context.startService(i); //breakpoint (action is "getNewDeck" here.)
}




@Override
protected void onHandleIntent(Intent intent) {
    Intent messageIntent=null;

    deckApiService=DeckApiService.retrofit.create(DeckApiService.class);


    if (intent != null) {

        final String action = intent.getAction(); // breakpoint (intent.getAction() is null here)

        try {
            switch (action) {
                case SR_GET_NEW_DECK:
                    //Geeft een nieuw deck terug, het deckid is op te vragen
                    messageIntent = handleGetNewDeck();
                    break;

                case SR_DRAW_CARDS_FROM_DECK:
                    //Geeft een pile terug met getrokken kaarten uit een deck
                    //in de intent zijn deckID en het aantal te trekken kaarten meegegeven
                    messageIntent = handleDrawCardsFromDeck(intent);
                    break;

                default:
                    Log.d(TAG, "onHandleIntent: Wrong parameters");
                    messageIntent = null;
                    break;

            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(TAG, "onHandleIntent: Wrong intent");
            messageIntent = null;
        }
    }


    if(messageIntent!=null) {
        LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getApplicationContext());
        manager.sendBroadcast(messageIntent);
    }

}

问题不是在这部分代码中产生的,我在另一个方法中以一个空的意图启动了 intentservice。在上面的代码中创建的意图在第一次调用完成后使用。