これを行うには多くの努力を払ってから、ついに私は尋ねました。私は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
を実行する必要があります。
これを達成する他の方法はありますか? 他の方法でデータを渡したり、ウィジェットからサービスのルーチンを呼び出すことはできますか?
ありがとうございましたJeeva、ボタンクリックイベントでは、私は活動を始めません。私はサービスで定義されたルーチンを実行するか、親密にしたい。 – JRC