0

该应用程序的相关部分是IntentService( DatabaseService) 和AppWidgetProvider( LotWidget)。在LotWidget中,当按下按钮时,PendingIntent会触发 a 向自身发送广播,并在 中接收onReceive()。到目前为止,所有这些工作都很好。在中,我从以及各种附加onReceive内容中读取了动作,然后启动 this或启动 main 。启动活动工作正常,但由于某种原因我无法理解,没有开始。我知道导致意图的代码是通过使用.IntentIntentServiceActivityDatabaseServiceDatabaseServiceLog

这是onReceive代码:

@Override
public void onReceive(Context context, Intent intent) {     
    super.onReceive(context, intent);
    if(intent.getAction().equals(RETURN_DATA_WIDGET) && initialize(context)){
        updateWidget(context);
    }
    else if(intent.getAction().equals(INTERNAL_INC)){
        Log.d("WIDG", "Incrememnt");
        Intent incr = new Intent(context, DatabaseService.class);
        incr.setAction(INCREMENT);
        incr.putExtra("incval", intent.getIntExtra("incval", 999));
        context.startService(intent);
    }
    else if(intent.getAction().equals(INTERNAL_UP)){
        Log.d("WIDG", "UPDATE");
        Intent upd = new Intent(context, DatabaseService.class);
        upd.setAction(UPDATE_COUNT);
        context.startService(intent);
    }
    else if(intent.getAction().equals(OPEN_APP)){
        Intent open = new Intent(context, TheLotActivity.class);
        open.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(open);
    }
}

使用相同的意图DatabaseService从 main开始Activity工作正常。我的清单将其定义DatabaseServiceService

<service android:name="com.bsprague.thelot.DatabaseService" >
    </service>

我知道 theService没有被启动,因为 aLog的开头没有被显示,尽管当它从 main 发送onHandleIntent时它显示得很好。Android 中是否有一些我遗漏的东西使它无法从 a开始?IntentActivityServiceBroadcastReceiver

4

1 回答 1

1

您正在对 设置一个操作Intent,而您<intent-filter>没有该操作。您可能会考虑将setAction()呼叫替换为呼叫putExtra()

没关系-正如您在评论中指出的那样,由于您正在指定组件,因此所有其他路由元素(例如,操作)都将被忽略。您更新评论中的错误表明您Intent选择了错误的组件,LotWidget而不是DatabaseService.

于 2012-07-03T22:24:08.337 回答