未从小部件接收java Android广播
我有一个小部件,按下按钮后,我将广播发送到服务。但我在我的onReceive()
没有收到任何广播
我的意图基本上是在小部件上单击按钮,它告诉服务执行一些操作。 但我无法从正在使用的widget接收任何广播
这是我的小部件代码-
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName componentName;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
componentName = new ComponentName(context, MyWidgetProvider.class);
remoteViews.setOnClickPendingIntent(R.id.play,getPendingSelfIntent(context, "PLAY",componentName));
appWidgetManager.updateAppWidget(componentName, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews;
ComponentName componentName;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
componentName = new ComponentName(context, MyService.class);
if (intent.getAction().equals("PLAY")) {
Log.d("hi","PLAY0");
remoteViews.setOnClickPendingIntent(R.id.engine_lock_unlock,getPendingSelfIntent(context,"PLAY",componentName));
serviceIntent = new Intent(context,MyService.class);
serviceIntent.setAction("PLEASE_PLAY");
Log.d("hi","PLAY1");
context.sendBroadcast(serviceIntent);
}
appWidgetManager.updateAppWidget(componentName, remoteViews);
}
protected PendingIntent getPendingSelfIntent(Context context, String action, ComponentName componentName) {
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(action);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, componentName);
return PendingIntent.getBroadcast(context, 0, intent, 0);
}
在我的服务中
public class ServiceWidgetReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("hi","PLAY2");
if (intent.getAction().equals("PLEASE_PLAY")) {
}
}
}
我的舱单是这样的-
<receiver 安卓:name=".widget.MyWidgetProvider" >
<intent-filter>
<action 安卓:name="安卓.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data 安卓:name="安卓.appwidget.provider"
安卓:resource="@xml/homescreen_widget_preview" />
</receiver>
<receiver 安卓:name=".service.MyService$ServiceWidgetReceiver" />
我只拿到日志-
PLAY0
PLAY1
为什么我没有得到我的广播
# 1 楼答案
我假设您已经像Myon所说的那样在意图过滤器中实现了操作,但是仍然没有广播到onReceive。你可以试试这个:
事实上,我昨天也遇到了类似的问题,我的widget在安卓5.1手机上运行良好。然而,我发现它无法在android 7.0索尼手机上执行点击操作。我仍在试图找出是索尼手机操作系统的问题还是安卓7.0或之后的问题,因为在升级7.0或之后,出现了很多不同的问题,因为它们在API中发生了很大的变化。不管怎样,我用的是吊坠。FLAG_UPDATE_CURRENT解决了我在7.0上遇到的问题
我只是认为将直接注册receiver类来实现这样的工作。绑定的服务不会直接影响接收方,因为影响接收方的唯一因素是上下文。所以,也许只是接收类就足够了
# 2 楼答案
我发现了我所犯的错误。我必须注册Receiver并在服务本身而不是在清单中注销它。 这对我有用
# 3 楼答案
您的接收器没有提供意向过滤器的接缝。尝试将其添加到mainfest文件中: