Android Widget+Service

谁说胖子不能爱 提交于 2019-12-25 08:13:55

问题


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

   <service android:name="com.example.app.services.CustomService" >
        <intent-filter>
            <action android:name="com.mediabook.app.ACTION_PLAY" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </service>

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!