0

このアプリケーションの問題の部分はIntentService( DatabaseService) とAppWidgetProvider( LotWidget) です。ではLotWidget、ボタンが押されると、PendingIntentそれ自体にブロードキャストを送信する が起動され、 で受信されonReceive()ます。これまでのところ、これはすべて正常に機能しています。では、さまざまなエクストラと同様onReceiveにアクションを読み取り、これを開始するか、メインを開始します。アクティビティの開始は正常に機能しますが、何らかの理由で理解できません。開始されていません。でテストすることで、インテントに至るコードが送信されていることがわかります。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、メインのActivity作品から開始すると正常に動作します。私のマニフェストは、次DatabaseServiceServiceように定義します。

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

の先頭にあるが表示されていないServiceため、 が開始されていないことはわかっていますが、これが main から送信されると正常に表示されます。から起動できないようにする、Androidに欠けているものはありますか?LogonHandleIntentIntentActivityServiceBroadcastReceiver

4

1 に答える 1

1

にアクションを設定していIntentます<intent-filter>が、そのアクションはありません。setAction()代わりに、呼び出しを呼び出しに置き換えることを検討してくださいputExtra()

コメントで指摘したように、コンポーネントを指定しているため、他のすべてのルーティング要素(アクションなど)は無視されます。更新されたコメントからのエラーは、がではなくIntent間違ったコンポーネントを取得していることを示しています。LotWidgetDatabaseService

于 2012-07-03T22:24:08.337 に答える