powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Поддержка проигрывания MP3 в WebView веб-приложении, как сделать stop()?
4 сообщений из 4, страница 1 из 1
Поддержка проигрывания MP3 в WebView веб-приложении, как сделать stop()?
    #38626541
7C3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
7C3
Гость
Всем привет!
Делаю приложение для Android как web-based. Поддержку <audio> ввели только с Gingerbread, а до этого приходится искать обходной путь с проигрыванием аудио в HTML5-приложениях :)

После долгих поисков на просторах Интернета был найден класс, добавляющий поддержку MP3-файлов через JavaScript с HTML-страницы (автор Kyle Barrows ), вот он:
Код AudioInterface.java
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
package com.freeforallapps.sportsplayer;

import java.io.IOException;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.webkit.JavascriptInterface;

public class AudioInterface {
 Context mContext;

 AudioInterface(Context c) {
  mContext = c;
 }
 
 //Play an audio file from the webpage
 @JavascriptInterface
 public void playAudio(String aud) { //String aud - file name passed 
									 //from the JavaScript function
  final MediaPlayer mp;

	 try {
	  AssetFileDescriptor fileDescriptor = 
		mContext.getAssets().openFd(aud);
								 mp = new MediaPlayer();
								 mp.setDataSource(fileDescriptor.getFileDescriptor(), 
								 fileDescriptor.getStartOffset(), 
								 fileDescriptor.getLength());
								 fileDescriptor.close();
								 mp.prepare();
								 mp.start();
	 } catch (IllegalArgumentException e) {
						   // TODO Auto-generated catch block
						   e.printStackTrace();
			  } catch (IllegalStateException e) {
						   // TODO Auto-generated catch block
						   e.printStackTrace();
			  } catch (IOException e) {
						   // TODO Auto-generated catch block
						   e.printStackTrace();
		   } 
 }
}

// В super.onCreate:
// myWebView.addJavascriptInterface(new AudioInterface(this), "AndAud");
// Проигрывание файла:
// <a onClick="AndAud.playAudio('audio/1.mp3');">Play audio</a>


К сожалению, в нем нет поддержки функции stop() или остановки предыдущего файла, то есть, запустив долгий mp3-файл, затем запустив другой файл, старый файл не останавливается и новый файл "накладывается" звучанием.
Моя проблема в том, что я полный ноль в Java, поэтому и была выбрана форма web-based приложения (т.к. работаю на js), где из Java только компонент WebView, а само приложение в виде HTML-файла в папке /assets.

Можно в этом классе сделать функцию stop() для остановки файла или, как вариант, предварительно останавливать играющий файл?
Пробовал вставлять перед mp.start() функции mp.stop(), mp.release(), mp.reset() и с условием if (mp.isPlaying()), но из-за кривизны моих рук приложение либо не реагирует, либо поддержка аудио вообще перестает работать. Даже просто остановка предыдущих поможет, т.к. можно для остановки проигрывать 1-секундный тихий файл, "эмулируя" stop().

Уважаемые Java-программисты, если это не трудно, пожалуйста подскажите.
Большое спасибо!
...
Рейтинг: 0 / 0
Поддержка проигрывания MP3 в WebView веб-приложении, как сделать stop()?
    #38626843
7C3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
7C3
Гость
Добавляю в AudioInterface.java после объявления класса медиаплеера "mp = new MediaPlayer();" такой код:
Код: sql
1.
2.
3.
4.
if (mp.isPlaying() == true) {
	mp.stop();
	mp.release();
}


Но он как будто его не видит, также продолжает "наслаивать" следующие аудиофайлы, не останавливая предыдущие!

Пожалуйста ткните меня носом, в какую сторону копать, перерыл весь stackoverflow, 48 раз пересобирал приложение, но так и не решил эту проблему.

Заранее огромное спасибо!
...
Рейтинг: 0 / 0
Поддержка проигрывания MP3 в WebView веб-приложении, как сделать stop()?
    #38626931
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще логично, вы же каждый раз новый объект MediaPleer создаете.

я бы, попробовал как то так переделать. на вскидку в принципе сильно думать лень.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
package com.freeforallapps.sportsplayer;

import java.io.IOException;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.webkit.JavascriptInterface;

public class AudioInterface {
 Context mContext;

 private MediaPlayer mp = null;
 
 AudioInterface(Context c) {
  mContext = c;
   mp = new MediaPlayer();
 }
 
 
 //Play an audio file from the webpage
 @JavascriptInterface
 public void playAudio(String aud) { //String aud - file name passed  //from the JavaScript function

 
	if (mp.isPlaying() == true) {
	mp.stop();
	mp.release();
}
 
		try {
			AssetFileDescriptor fileDescriptor = mContext.getAssets().openFd(aud);
			mp.setDataSource(fileDescriptor.getFileDescriptor(), 
			fileDescriptor.getStartOffset(), 
			fileDescriptor.getLength());
			fileDescriptor.close();
			mp.prepare();
			mp.start();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}
...
Рейтинг: 0 / 0
Поддержка проигрывания MP3 в WebView веб-приложении, как сделать stop()?
    #38627119
7C3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
7C3
Гость
Джибс , огромное спасибо! Работает остановка предыдущего аудиофайла! :)
Дополнительно сейчас поштудировал про видимость переменных, вынес ссылочную переменную mp из функций в сам класс, сделал ее видимость public вместо final, а в класс добавил функцию stopAudio() с остановкой объекта - и стала работать и отдельно остановка проигрывающегося аудиофайла.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Поддержка проигрывания MP3 в WebView веб-приложении, как сделать stop()?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]