У меня проблемы с 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
Аналогичный код работает для меня. Но я могу подключиться к сервису только в том случае, если служба запущена. Вам нужно увидеть ошибки, чтобы узнать, почему вы не можете достичь до onServiceConnected. – 2011-03-04 08:21:59
Это может помочь: http://stackoverflow.com/questions/9310266/can-mediaplaybackservice-be-used-for-getting-information-of-currently-playing-au/10620084#10620084 –