2011-07-12 32 views
1

經過這麼多的努力,我終於問到了。我有小部件與textview,按鈕和imageview。這兩個視圖都從首選項加載。當用戶單擊小部件中的imageview時用戶單擊textview和myActivityB時,我可以啓動myActivityA。但無法接收按鈕的onclick事件(在服務中)。我按照以下方式進行操作。android:app小部件::如何將非持久數據傳遞給小部件服務

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

在爲MyService類,

// 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在我的服務中調用,

任何人都可以提出什麼可能是問題?

從按鈕點擊事件我究竟想要什麼...... 如果服務未啓動(服務在第一個活動中啓動,生命期限現在限於活動),那麼啓動它並且應該執行TOGGLE_ACTION 。 如果服務已經開始(意味着我的活動已經最小化),那麼應該執行TOGGLE_ACTION

有沒有其他辦法可以達到這個目的? 或其他方式來傳遞一些數據並調用小部件的一些服務例程?

回答

0

試試這個,

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這是你的按鈕的ID。

+0

感謝Jeeva,在按鈕點擊事件我不想開始活動。我想執行或親密定義在服務中的例程。 – JRC

相關問題