问题
I have a music player which plays music using a service,all the broadcast receivers within that service are defined inside the service and not externally.
I am totally new to widgets so i had been seeing a few tutorials.But they didn't help me much
I am totally new to pending intents soo.I am so confused right now please help me out...
All i want to do is just trigger the broadcast inside the service using the button of the widget ...
Here is the copy pasted code which i had been trying to understand
RemoteViews controlButtons = new RemoteViews(context.getPackageName(),
R.layout.widget);
Intent playIntent = new Intent(context, Music_service.class);
PendingIntent playPendingIntent = PendingIntent.getService(
context, REQUEST_CODE, playIntent, INTENT_FLAGS);
controlButtons.setOnClickPendingIntent(
R.id.bPlay, playPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, controlButtons);
And here is my app
:D
回答1:
Create a custom Intent Action and set it as PendingIntent to the widget item ( button in your case)
Intent intent = new Intent("com.example.app.ACTION_PLAY");
PendingIntent pendingIntent = PendingIntent.getService(context.getApplicationContext(), 100,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
remoteViews.setOnClickPendingIntent(R.id.bPlay, pendingIntent);
Then, change your manifest to handle the Action passed in PendingIntent
Finally , when the play button is clicked , the Service will receive the Action and started. Check for the Action in onStartCommand
@Override
public int onStartCommand(Intent intent, int flag, int startId) {
if(intent.getAction().equalsIgnoreCase("com.example.app.ACTION_PLAY")){
// do your stuff here
}
You can set similar custom Actions for all the required views in the Widget.
See the compile code here https://gist.github.com/androidbensin/4a9f044ac0b3110c049e
Hope your are good now. Let me know if any issues
来源:https://stackoverflow.com/questions/23553816/android-widgetservice