Ank*_*pli 5 android android-widget android-service
我想从小部件内部启动服务,我知道我可以使用PendingIntent这样做
PendingIntent intent = PendingIntent.getService(context, 0, new Intent(context, MyService.class), Intent.FLAG_ACTIVITY_NEW_TASK);
remoteViews.setOnClickPendingIntent(R.id.buttonWidgetStartService, intent);
Run Code Online (Sandbox Code Playgroud)
但问题是我已经在该按钮上使用了PendingIntent用于其他目的.所以,我尝试使用启动服务
context.startService(new Intent(context, MyService.class));
Run Code Online (Sandbox Code Playgroud)
而我在这里NullPointerException.
这是我的代码:
public class WiNetWidget extends AppWidgetProvider {
public static String TOGGLE_WINET = "ToggleWiNetService";
private static boolean serviceRunning = false;
private static Intent serviceIntent;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
serviceIntent = new Intent(context, WiNetService.class);
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_winet);
remoteViews.setViewVisibility(R.id.buttonWidgetLoading, View.INVISIBLE);
remoteViews.setViewVisibility(R.id.buttonWidgetStartService, View.VISIBLE);
Intent newIntent = new Intent(context, WiNetWidget.class);
newIntent.setAction(TOGGLE_WINET);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, newIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.buttonWidgetStartService, pendingIntent);
remoteViews.setOnClickPendingIntent(R.id.buttonWidgetStopService, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
Log.i(TOGGLE_WINET, "updated");
}
}
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(TOGGLE_WINET)) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_winet);
if(serviceRunning) {
context.stopService(serviceIntent);
remoteViews.setViewVisibility(R.id.buttonWidgetStartService, View.VISIBLE);
remoteViews.setViewVisibility(R.id.buttonWidgetStopService, View.INVISIBLE);
Toast.makeText(context, "serviceStopped", Toast.LENGTH_SHORT).show();
} else {
context.startService(serviceIntent);
remoteViews.setViewVisibility(R.id.buttonWidgetStopService, View.VISIBLE);
remoteViews.setViewVisibility(R.id.buttonWidgetStartService, View.INVISIBLE);
Toast.makeText(context, "serviceStarted", Toast.LENGTH_SHORT).show();
}
serviceRunning=!serviceRunning;
ComponentName componentName = new ComponentName(context, WiNetWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(componentName, remoteViews);
}
super.onReceive(context, intent);
}
}
Run Code Online (Sandbox Code Playgroud)
注:如果删除包含线条startService和stopService,一切进展顺利.
提前致谢!!:)
| 归档时间: |
|
| 查看次数: |
8074 次 |
| 最近记录: |