0

Я новичок в android, и теперь я выполняю упражнение, которое приложение уже хранило аудиофайл (mp4) в папке/res/raw /, и этот файл можно найти в классе android Service как R.raw.audiofile. В классе службы я создал три методаКак запустить медиаплеер, нажав кнопку в android?

onCreate(); 
onStartCommand(); 
onDestroy(); 

в onCreate() я создал MediaPlayer и в onStartCommand() я начала MediaPlayer

mp.start() and 
returned STRT_STICKY 

играть и в onDestroy() я сделал это:

mp.stop(); 

в макете xml Я создал кнопку с этим атрибутом:

android:onClick="onClickStart" 

который вызывает метод в MainActivity, и это действие теперь воспроизводит звук. однако я теперь застрял здесь, как связать это с музыкальным файлом, чтобы эта кнопка запускала звук. может кто-нибудь, пожалуйста, дайте мне некоторую идею?

поэтому у меня есть один Основной класс активности и один (Мой) класс обслуживания (распространяется на Servcie) и один файл xml для макета для выполнения этого действия.

+0

Попробуйте взглянуть на это [ссылка] [1] [1]: http://stackoverflow.com/questions/7291731/how-to-play-audio-file-in-android – minomic

+0

да , но это другая история, поскольку она вызывает сайт аудиофайла приложения. теперь это файл, который хранится в самом приложении, и вопросы касаются того, как реализовать кнопку в основном действии, чтобы вызвать службу, и кнопка вызывается в XML-файле – dhssa

ответ

1

Вы можете общаться между деятельности и предоставления услуг с использованием Intent или путем привязки к службе и отправки сообщения. В этом случае привязка к Сервису и отправка сообщения в прослушивателе кликов кнопки, пожалуй, самый чистый подход. Это также дает вам возможность соответствующим образом обновить интерфейс, передав Messenger/Handler в поле replyTo сообщения. Когда я попаду на компьютер, я отредактирую фрагменты кода.

Edit:

Большая часть кода вам нужно, это в Android документы here.

Основная идея заключается в том, что вам необходимо создать класс Handler внутри вашего Service. Правильный способ сделать это (чтобы избежать утечек в Handler и сопутствующее предупреждении Lint) выглядит следующим образом:

private static class MyHandler extends Handler { 
    private WeakReference<MyService> mService; 

    public MyHandler(MyService service) { 
     mService = service; 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     // Your message handling here... 
     // You can use the members/methods of the Service with 
     // mService.get().____ 
    } 
} 

Тогда вы можете создать Messenger член и переопределить метод onBind в Service, например, так:

private Messenger mMessenger = new Messenger(new MyHandler(this)); 

@Override 
public IBinder onBind(Intent intent) { 
    return mMessenger.getBinder(); 
} 

Тогда вам нужно вызвать bindService с соответствующим Intent и ServiceConnection от вашего Activity. См. Ссылку на пример кода.В onServiceConnected способе ServiceConnection вы можете копить Messenger для Service с:

@Override 
public void onServiceConnected(ComponentName className, IBinder service) { 
    mMessenger = new Messenger(service); 
} 

Вы можете также создать Handler и Messenger в Activity и поставить его в качестве replyTo поля любых Message объектов, отправленных в Service , Таким образом, вы можете сообщить Activity, успешно или нет MediaPlayer, и, при необходимости, обновить интерфейс.

1

Вам нужен OnclickListener для кнопки, как

button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
      } 

Посмотрите здесь для MediaPlayer

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