android:app widget ::如何将非持久性数据传递给widget中的服务

时间:2011-07-12 11:35:52

标签: android android-appwidget

经过这么多努力,我终于要求了。我有带textview,按钮和imageview的小部件。两个视图都是从首选项加载的。当用户点击widget中的imageview时,我可以在用户点击textview和myActivityB时启动myActivityA。但是无法接收按钮的onclick事件(在服务中)。我是按照以下方式做的。

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。在MyService中调用OnStartCommand

任何人都可以提出可能存在的问题吗?

我想从按钮点击事件到底是什么...... 如果未启动服务(服务在第一个活动中启动,生命周期现在仅限于活动),则启动它......并且应执行TOGGLE_ACTION。 IF服务已经启动(意味着我的活动被最小化),然后应该执行TOGGLE_ACTION

还有其他方法可以达到这个目的吗? 或者通过其他方式传递一些数据并从小部件调用一些服务程序?

1 个答案:

答案 0 :(得分: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。