2011-07-12 11 views
1

これを行うには多くの努力を払ってから、ついに私は尋ねました。私はtextview、button、imageviewのウィジェットを持っています。両方のビューがプリファレンスからロードされます。ユーザーがtextviewをクリックするとmyActivityAを開始でき、ユーザーがウィジェットからimageviewをクリックするとmyActivityBを開始できます。しかしボタンのonclickイベント(サービス中)を受け取ることができません。私はこれを次のようにしています。たMyServiceクラスでandroid:app widget ::非永続データをウィジェットからサービスに渡す方法

MyWidgetProviderクラス

final ComponentName serviceName = new ComponentName(context, "com.mypkg.MyService"); 
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_main); 
Intent intent = new Intent(Service.TOGGLE_ACTION); 
intent.setComponent(serviceName); 
PendingIntent pendingIntent = PendingIntent.getService(context,0 /* no requestCode */, intent, 0 /* no flags */); 
remoteViews.setOnClickPendingIntent(R.id.widget_button1, pendingIntent); 

// broadcast message receiver for commands to service. 
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() 
{ 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 
      String cmd = intent.getStringExtra("Command"); 

      if (TOGGLE_ACTION.equals(action)) 
      { 
       m_iKey = intent.getIntExtra("MyService.MyKey", 0); 

    // call functions defined in MyService. 

      } 
} 
}; 

私の問題は、私は全くのサービスでTOGGLE_ACTIONを受信することはできませんしています。 OnStartCommandがMyServiceで呼び出された場合

問題が発生する可能性がありますか?

ボタンクリックイベントから欲しいのはどれですか.... サービスが開始されていない(最初のアクティビティでサービスが開始されていますが、寿命は現在アクティビティに制限されています)...それから... TOGGLE_ACTIONを実行する必要があります。 IFサービスが既に開始されている(自分の活動が最小限であることを意味します)場合は、TOGGLE_ACTIONを実行する必要があります。

これを達成する他の方法はありますか? 他の方法でデータを渡したり、ウィジェットからサービスのルーチンを呼び出すことはできますか?

答えて

0

が、これはあなたのボタンIDで

Intent intent= new Intent(context, myActivityB.class); 
PendingIntent pending=PendingIntent.getActivity(context, 0 , intent,PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.button, pending); 

R.id.button、これを試してみてください。

+0

ありがとうございましたJeeva、ボタンクリックイベントでは、私は活動を始めません。私はサービスで定義されたルーチンを実行するか、親密にしたい。 – JRC

関連する問題