经过这么多努力,我终于要求了。我有带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
。
还有其他方法可以达到这个目的吗? 或者通过其他方式传递一些数据并从小部件调用一些服务程序?
答案 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。