我无法将带有操作的意图传递给intentservice。可以启动服务并且意图不为null但操作为空。使用putExtra时会出现同样的问题。
当我到达第一个断点时,我可以看到该动作已被填充,但当我在onHandleIntent方法中到达断点时,我的动作为空。 onStart方法和onStartCommand方法中的操作也已为空。
我已经包含了我的intentservice类的代码。我使用方法getNewDeck作为辅助方法,以便我能够从各种活动中调用此方法,而无需创建意图或忘记某些参数。此帮助程序方法启动该服务。但是我已经从一项活动中启动了这项服务,问题仍然存在,所以我不认为问题就在那里。
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);
}
}
答案 0 :(得分:0)
问题没有在这部分代码中创建,我在另一个方法中使用空意图启动了intentservice。在第一次调用完成后,使用了上面代码中创建的意图。