2010-11-28 8 views
4

Ich arbeite an einem Musik-Player-Widget (Home-Bildschirm-Widget) .. Es braucht nur ein Lied zu spielen, (vorzugsweise mit der Mediaplayer-Klasse). Aber ich bin mir nicht sicher, wie ich es umsetzen soll. Ich bin etwas unerfahren mit Android-Entwicklung, nur so, dass es erwähnt wird.Android Musik-Player-Widget

Die Klasse, die ich bis jetzt habe, erstreckt sich AppWidgetProvider, und ich denke, es ist keine gute Idee, diese Klasse den Musik spielenden Teil behandeln zu lassen, sondern eine Service. Und wenn ja, wie?

Außerdem habe ich 3 Tasten: Wiedergabe, Pause und Stopp, und ich kann unterscheiden, welche in onReceive(...) gedrückt wurde.

Vielen Dank im Voraus!


Hier ist die Klasse.

public class MusicManager extends AppWidgetProvider { 

    private final String ACTION_WIDGET_PLAY = "PlaySong"; 
    private final String ACTION_WIDGET_PAUSE = "PauseSong"; 
    private final String ACTION_WIDGET_STOP = "StopSong"; 
    private final int INTENT_FLAGS = 0; 
    private final int REQUEST_CODE = 0; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 

     RemoteViews controlButtons = new RemoteViews(context.getPackageName(), 
       R.layout.main); 

     Intent playIntent = new Intent(context, MusicService.class); 

     Intent pauseIntent = new Intent(context, MusicService.class); 

     Intent stopIntent = new Intent(context, MusicService.class); 


     PendingIntent playPendingIntent = PendingIntent.getService(
       context, REQUEST_CODE, playIntent, INTENT_FLAGS); 
     PendingIntent pausePendingIntent = PendingIntent.getService(
       context, REQUEST_CODE, pauseIntent, INTENT_FLAGS); 
     PendingIntent stopPendingIntent = PendingIntent.getService(
       context, REQUEST_CODE, stopIntent, INTENT_FLAGS); 

     controlButtons.setOnClickPendingIntent(
       R.id.btnPlay, playPendingIntent); 
     controlButtons.setOnClickPendingIntent(
       R.id.btnPause, pausePendingIntent); 
     controlButtons.setOnClickPendingIntent(
       R.id.btnStop, stopPendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetIds, controlButtons);   
    } 
} 

Antwort

3

<service android:name=".MusicService" android:enabled="true" /> zum Manifest hinzugefügt!

+0

Ich habe auch die gleiche Anforderung wie Sie. Kannst du bitte deine Serviceklasse hier posten? – AndyN

+0

Ich habe dasselbe Problem können Sie bitte Ihren Code für MusicService-Klasse veröffentlichen ??? – KeTaN

+0

@KeTaN Ich wünschte, ich könnte, aber ich habe diesen Code vor vielen Jahren gelöscht. Es tut uns leid! Hoffe, du findest eine Antwort woanders. – whirlwin

0

Im onUpdate(...) Methode Ihrer AppWidgetProvider, verwenden Sie so etwas wie dieses einen Dienst zu starten (in diesem Beispiel den Dienst auf eine Schaltfläche klicken Ereignis zuordnet):

Intent intent = new Intent(context, MusicService.class); 
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); 

// Get the layout for the App Widget and attach an on-click listener to the button 
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); 
views.setOnClickPendingIntent(R.id.button, pendingIntent); 

Für weitere Informationen schauen here

+0

Danke für die Antwort, aber es funktioniert immer noch nicht. Vermutlich vermisse ich hier etwas wirklich Offensichtliches. – whirlwin

+0

Woher wissen Sie, dass das Problem nicht in den Diensten liegt? Lassen Sie die Dienste beim Start etwas protokollieren, damit Sie zumindest wissen, ob sie angerufen werden. – aromero

+0

Ich habe manuelle Debuggen mit Toast, aber das Problem war, dass ich den Dienst im Manifest enthalten vergessen! Ich hasse mich gerade deswegen. – whirlwin