Настройка IMediaPlaybackService

1

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

/* //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();
}

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

  • Ключевые слова "in" заставляют Eclipse выдавать ошибку. Точная ошибка: Syntax error on token "long", delete this token. Я не уверен, почему там есть ключевые слова "in". Они не являются ключевыми словами в 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 нет заглушки.

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

Так что я смог построить свой проект, но теперь у меня проблемы с самим сервисом. Вот код для моего класса 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.
  • 0
    Это может помочь: stackoverflow.com/questions/9310266/…
Теги:
music
service
playback

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню