2012-07-03 1 views
0

해당 응용 프로그램의 해당 부분은 IntentService (DatabaseService)이고 AppWidgetProvider (LotWidget)입니다. LotWidget에서 버튼을 누르면 PendingIntent이 실행되어 브로드 캐스트를 자신에게 보내고 onReceive()으로 수신됩니다. 이 모든 것은 지금까지 잘 작동합니다. onReceive에서 Intent과 다양한 부가 기능을 읽고 IntentService을 시작하거나 Activity 메인을 시작하십시오. 액티비티를 시작하면 문제가 없지만 이해할 수없는 이유로 인해 DatabaseService이 시작되지 않습니다. DatabaseService 의도로 이어지는 코드는 Log으로 테스트하여 전송됩니다. 여기 BroadcastReceiver에서 서비스 시작

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); 
    } 
} 

주요 Activity에서 DatabaseService을 시작하는 같은 의도를 사용하여 잘 작동합니다. 내 매니페스트 정의 DatabaseService과 같이 Service A와 : 나는 onHandleIntent의 시작에서 Log가 표시되지 않는 때문에 잘 표시하지만이 Intent이 때 Service가 시작되지 않는 알고

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

Activity에서 보냈습니다. Android에 누락 된 항목이있어 ServiceBroadcastReceiver에서 시작할 수 없습니까?

답변

1

Intent에 작업을 설정 중이므로 <intent-filter>에는 해당 작업이 없습니다. 대신 setAction() 통화를 putExtra() 통화로 바꾸는 것이 좋습니다.

신경 쓰지 마세요. 사용자가 설명에서 지적한 바와 같이, 구성 요소를 지정하기 때문에 다른 모든 라우팅 요소 (예 : 작업)는 무시됩니다. 업데이트 된 의견의 오류로 인해 IntentDatabaseService 대신에 잘못된 구성 요소 인 LotWidget을 선택하고 있음을 나타냅니다.

+0

나는 setAction()을 putExtra()로 대체하려고 시도했지만, DatabaseService는 여전히 여분의 것을 읽기 위해 호출되지 않았다. – BSprague

+0

@ user1500074 : LogCat에서 경고를 확인하십시오. – CommonsWare

+0

이 오류가 나타납니다 : '07 -03 18 : 43 : 56.546 : W/ActivityManager (1629) : 서비스 의도를 시작할 수 없습니다 {act = up flg = 0x10000000 cmp = com.bsprague.thelot/.LotWidget bnds = [266,767] [398,839]} : 찾을 수 없음 ' 이전에 서비스를 받았고 IntentService로 전환했으며 오류가 완전히 사라졌습니다. 문제는 임의의 슬래시와 관련이 있습니까? – BSprague