2010-09-02 2 views
1

У меня проблемы с IMediaPlaybackService для Android. Мне сказали, что все, что мне нужно сделать, это поместить его в свой пакет (в данном случае, com.android.music), однако я не могу получить свой проект для сборки, когда я это сделаю. Код для IMediaPlaybackService выглядит следующим образом:Настройка IMediaPlaybackService для Android

/* //device/samples/SampleCode/src/com/android/samples/app/RemoteServiceInterface.java 
** 
** Copyright 2007, The Android Open Source Project 
** 
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
** 
**  http://www.apache.org/licenses/LICENSE-2.0 
** 
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License. 
*/ 

package com.android.music; 

interface IMediaPlaybackService 
{ 
    void openFile(String path, boolean oneShot); 
    void openFileAsync(String path); 
    void open(in long [] list, int position); 
    int getQueuePosition(); 
    boolean isPlaying(); 
    void stop(); 
    void pause(); 
    void play(); 
    void prev(); 
    void next(); 
    long duration(); 
    long position(); 
    long seek(long pos); 
    String getTrackName(); 
    String getAlbumName(); 
    long getAlbumId(); 
    String getArtistName(); 
    long getArtistId(); 
    void enqueue(in long [] list, int action); 
    long [] getQueue(); 
    void moveQueueItem(int from, int to); 
    void setQueuePosition(int index); 
    String getPath(); 
    long getAudioId(); 
    void setShuffleMode(int shufflemode); 
    int getShuffleMode(); 
    int removeTracks(int first, int last); 
    int removeTrack(long id); 
    void setRepeatMode(int repeatmode); 
    int getRepeatMode(); 
    int getMediaMountedCount(); 
} 

Однако там, как представляется, несколько проблем, которые мешают мне строить свой проект с этим файлом:

  • «в» ключевые слова вызывают Eclipse, с получением ошибка. Точная ошибка: Syntax error on token "long", delete this token. Я не уверен, почему есть «в» ключевые слова. Они не являются ключевыми словами на Java, каковы они?
  • Другая ошибка, которая возникает, это The type com.android.music.IMediaPlaybackService is not visible, которая устранена путем создания интерфейса.
  • Окончательная ошибка: Stub cannot be resolved or is not a field., когда я выполняю эту строку кода: this.mService = IMediaPlaybackService.Stub.asInterface(service);, потому что в IMediaPlaybackService нет заглушки.

Другие, похоже, с легкостью справляются с этими проблемами, поэтому что мне не хватает? Это, наверное, что-то простое, что я не вижу, но я боролся с этим дольше, чем следовало бы. Нужно ли мне возиться с моей настройкой проекта?

Заранее благодарен!

С уважением, celestialorb.

EDIT:

Так что я был в состоянии построить свой проект, но теперь у меня возникают проблемы с самой службы. Вот код для моего класса MediaPlayerServiceConnection:

import android.content.ComponentName; 
import android.content.ServiceConnection; 
import android.os.IBinder; 
import android.os.RemoteException; 
import android.util.Log; 

import com.android.music.IMediaPlaybackService; 

public class MediaPlayerServiceConnection implements ServiceConnection { 
    // Tag for debugging. 
    private static final String TAG = "MediaPlayerServiceConnection"; 

    // The service. 
    private IMediaPlaybackService mService; 

    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     Log.i(TAG, "MediaPlaybackService is connected! Name: " + name.getClassName()); 

     // This is the important line. 
     this.mService = IMediaPlaybackService.Stub.asInterface(service); 

     // If all went well, then we can use the interface. 
     try { 
      Log.i(TAG, "Current track: " + this.mService.getTrackName()); 
      Log.i(TAG, "Artist: " + this.mService.getArtistName()); 
     } catch(RemoteException e) { e.printStackTrace(); } 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     Log.i(TAG, "MediaPlaybackService disconnected!"); 
    } 
} 

... и вот код в моей деятельности, которая связывает службу, но onServiceConnected метод не вызывается, я неправильно пытался использовать службу?

// TESTING MEDIAPLAYBACK SERVICE 
Intent intent = new Intent(); 
intent.setClassName("com.android.music", "com.android.music.MediaPlaybackService"); 
MediaPlayerServiceConnection conn = new MediaPlayerServiceConnection(); 
this.bindService(intent, conn, Context.BIND_AUTO_CREATE); 
// END TEST 
+0

Аналогичный код работает для меня. Но я могу подключиться к сервису только в том случае, если служба запущена. Вам нужно увидеть ошибки, чтобы узнать, почему вы не можете достичь до onServiceConnected. – 2011-03-04 08:21:59

+0

Это может помочь: http://stackoverflow.com/questions/9310266/can-mediaplaybackservice-be-used-for-getting-information-of-currently-playing-au/10620084#10620084 –

ответ

0

Я пробовал привязываться к службе медиаплеера сам .... никогда не был в состоянии. Я просто реализовал свое собственное обслуживание игроков за меньшее время, чем потребовалось, чтобы попытаться использовать Androids ...

Смежные вопросы