0
我是新的Android和我有一点问题,我已经搜查多个论坛并没有什么..Android小工具失去未决意图
我有一个简单的小工具,显示电池并点击打开弹出式主题的活动。
所以我这个文件太多了,可能有些方法错了?
WidgetProvider:
public class Widget extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
context.startService(new Intent(context, Service.class));
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
ComponentName thisWidget = new ComponentName(context,
Widget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
RemoteViews updateViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
Intent intent = new Intent(context, Popup.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
intent, 0);
updateViews.setOnClickPendingIntent(R.id.widget_layout,
pendingIntent);
manager.updateAppWidget(widgetId, updateViews);
}
}
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
context.stopService(new Intent(context, Service.class));
super.onDisabled(context);
}
}
而且我的服务:
public class Service extends Service {
private int batteryLevel = 0;
RemoteViews updateViews;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
batteryLevel = intent.getIntExtra("level", 0);
updateViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
updateViews.setImageViewBitmap(R.id.imgBattery,
buildBitmap(batteryLevel + "%", context));
ComponentName thisWidget = new ComponentName(context,
Widget.class);
AppWidgetManager manager = AppWidgetManager
.getInstance(context);
manager.updateAppWidget(thisWidget, updateViews);
}
}
};
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, intentFilter);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
unregisterReceiver(Receiver);
super.onDestroy();
}
}
有人可以帮我吗?而除此之外,该服务具有30MB ...同时运行
谢谢! 1.我在onUpdate(Widget类)上删除了什么? 2. onEnabled我已经通过启动服务,没关系?因为当我重新启动我的手机它只更新电池更换.. – FilipeOS 2013-04-30 21:42:57
1.对不起,我不明白你的第一个问题 2. onEnabled()仅在App Widget第一次创建实例时调用。例如,如果用户添加了App Widget的两个实例,这只是第一次。这就是为什么服务在重新启动后没有启动的原因。从onUpdate()或onReceive()启动服务,但要确保它在应用程序的生命周期中只发生一次。使用例如一个静态布尔变量来检查它是否已经启动。 – 2013-05-01 01:45:35
1.我必须删除我的窗口小部件类中的一些内容,因为我已经制定了服务意图?删除重复的代码? 2.我用这个例子http://stackoverflow.com/questions/600207/android-check-if-a-service-is-running哪里没有运行然后启动它,好主意?更好的改善?谢谢! – FilipeOS 2013-05-02 08:57:29