해당 응용 프로그램의 해당 부분은 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에 누락 된 항목이있어 Service
을 BroadcastReceiver
에서 시작할 수 없습니까?
나는 setAction()을 putExtra()로 대체하려고 시도했지만, DatabaseService는 여전히 여분의 것을 읽기 위해 호출되지 않았다. – BSprague
@ user1500074 : LogCat에서 경고를 확인하십시오. – CommonsWare
이 오류가 나타납니다 : '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