Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 17 июн 2019, 08:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 01 фев 2014, 17:18 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
В уроке савсем ничего не сказано как регулировать громкость, можно потратить часы на поиски нужной информации по темеhttp://stackoverflow.com/questions/5215459/android-mediaplayer-setvolume-function

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 фев 2014, 12:23 

Зарегистрирован: 27 дек 2013, 18:53
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Такое дело:
Создаю программу для воспроизведения онлайн стримов с сайта Twitch.tv. Видео воспроизвожу через VideoView и оно нормально воспроизводится на телефонах, если же видео не воспроизводится по причине высокого разрешения, то воспроизвожу видео через WebView (с этим проблем также нет). Но на планшетах, вроде Nexus 7 или Nexus 10, где оно вроде бы должно нормально воспроизводиться - проигрывается лишь 2-3 секунды после чего в логах всплывают Error (1000, 0) и Error (-38, 0)

ссылка на видео имеет следующий вид:
Код: [ Загрузить ] [ Скрыть ]
  1. http://video7.sfo01.hls.twitch.tv/hls66/boppo_8457904928_61520751/chunked/index-live.m3u8?token=id=3429484797249157298,bid=8457904928,exp=1391765367,node=video7-1.sfo01.hls.justin.tv,nname=video7.sfo01,fmt=chunked&sig=cc998dfd3ff02f49e94f62e42e02fe45e41652c8 


Код: [ Загрузить ] [ Скрыть ]
  1. private void startWatchVideo(int position) { 
  2.         webViewVA.setVisibility(View.GONE); 
  3.         videoViewVA.setVisibility(View.VISIBLE); 
  4.          
  5.         video_link = listVideoLinks.get(position); 
  6.         videoViewVA.setMediaController(new MediaController(this)); 
  7.         videoViewVA.setVideoURI(Uri.parse(video_link)); 
  8.         videoViewVA.requestFocus(); 
  9.          
  10.         videoViewVA.setOnPreparedListener(new OnPreparedListener() { 
  11.             public void onPrepared(MediaPlayer media) { 
  12.                 mp = media; 
  13.                 media.start(); 
  14.             } 
  15.         }); 
  16.          
  17.         videoViewVA.setOnErrorListener(new OnErrorListener() { 
  18.             @Override 
  19.             public boolean onError(MediaPlayer mp, int what, int extra) { 
  20.                 if (what == 1 || what == 100) 
  21.                 { 
  22.                     videoViewVA.stopPlayback(); 
  23.                     startWatchWebview(real_name); 
  24.                 } 
  25.                  
  26.                 return false; 
  27.             } 
  28.         }); 
  29.          
  30.          
  31.     } 



Код: [ Загрузить ] [ Скрыть ]
  1. 02-06 12:19:45.863: D/MediaPlayer(2171): Couldn't open file on client side, trying server side 
  2. 02-06 12:19:54.962: D/MediaPlayer(2171): getMetadata 
  3. 02-06 12:19:56.403: W/MediaPlayer(2171): info/warning (3, 0) 
  4. 02-06 12:19:56.443: I/MediaPlayer(2171): Info (3,0) 
  5. 02-06 12:19:58.335: W/AudioSystem(2171): AudioFlinger server died! 
  6. 02-06 12:19:58.345: W/IMediaDeathNotifier(2171): media server died 
  7. 02-06 12:19:58.345: E/MediaPlayer(2171): error (100, 0) 
  8. 02-06 12:19:58.345: E/MediaPlayer(2171): Error (100,0) 
  9. 02-06 12:19:58.345: D/VideoView(2171): Error: 100,0 
  10. 02-06 12:19:58.345: E/MediaPlayer(2171): stop called in state 0 
  11. 02-06 12:19:58.345: E/MediaPlayer(2171): error (-38, 0) 
  12. 02-06 12:19:58.345: I/ServiceManager(2171): Waiting for service media.audio_flinger... 
  13. 02-06 12:19:59.456: W/MediaPlayer(2171): mediaplayer went away with unhandled events 
  14. 02-06 12:20:00.087: D/TilesManager(2171): Starting TG #0, 0x73b62910 
  15. 02-06 12:20:00.087: D/TilesManager(2171): new EGLContext from framework: 73a16cb8  
  16. 02-06 12:20:00.087: D/GLWebViewState(2171): Reinit shader 
  17. 02-06 12:20:00.157: D/GLWebViewState(2171): Reinit transferQueue 


Подскажите, с чем это может быть связано и как это можно решить?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 10:57 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
А media player не работает с playlist`ами ?

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 12:58 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
а возможно играть всю папку c sd

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 13:00 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
Урок получился - действительно только самые основные возможности(

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 13:33 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
IgNa писал(а):
Урок получился - действительно только самые основные возможности(

урок преполгает, что далее вы будете изучать документацию...
чтобы "играть" всю папку, что мешает выполнить итерацию по файлам в папке вроде:

Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. public static void main(String... args) {
  2.     File[] files = new File("/").listFiles();
  3.     showFiles(files);
  4. }
  5.  
  6. public static void showFiles(File[] files) {
  7.     for (File file : files) {
  8.         if (file.isDirectory()) {
  9.             System.out.println("Directory: " + file.getName());
  10.             showFiles(file.listFiles()); // Calls same method again.
  11.         } else {
  12.             System.out.println("File: " + file.getName());
  13.         }
  14.     }
  15. }


и воспроизвести:

Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. String PATH_TO_FILE = "/sdcard/music.mp3";    
  2. mediaPlayer = new  MediaPlayer();
  3. mediaPlayer.setDataSource(PATH_TO_FILE);
  4. mediaPlayer.prepare();  
  5. mediaPlayer.start()


что такое playlist? Это список путей к файлам, который вы составили...

P.S. обучение программированию -это не совсем "выучивание" common practice... ;)

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 14:47 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
ЧТО ЭТО ???

В первой части ты куда то пытаешься вывести список фалов папки ?
Во второй части ты намерен проиграть файл music.mp3 ?
Я всё правильно понял ?))

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 14:53 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
IgNa писал(а):
ЧТО ЭТО ???

В первой части ты куда то пытаешься вывести список фалов папки ?

Цитата:
а возможно играть всю папку c sd

ДА. я не пытаюсь я тебе явно показал что у вас в windows есть dir которая показывает список фалов в папке, такое есть и в Android и java это умеет...
ВОРПОС: чем куда -то выведенный список файлов в папке отличается от playlist ?????
Цитата:
Во второй части ты намерен проиграть файл music.mp3 ?

ДА.как и любой другой файл из папи который ранее куда -то выводил....
Цитата:
Я всё правильно понял ?))

ДА. если слово понял к собственному впоросу тут вообще уместно ;)

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 15:13 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
если простое объяснение принципа по которому это происходит вне зависимости от платформы и языка программирования не понятно, можно посмотреть, как вместо списка файлов в дирректории используется курсор и вообще, как это делается сегодня можно посмотреть тут: https://github.com/android/platform_pac ... roid/music

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 18:56 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
altwin, у меня не получается перекачать файлы из папки в строковый массив почему то
Код: [ Загрузить ] [ Скрыть ]
  1. Объявляю строковый массив вначале  программы           String[] FilesNames; 
  2.  
  3. Далее в обработке нажатия на папку в листвью пишу: 
  4.  
  5. int a=-1;   //'это потребуется для перелива путей к mp3-файлам в этот массив 
  6. String asd = ah.getGroupText(groupPosition);    // здесь я выясняю полное название папки  
  7. String folder ="/mnt/sdcard/music/love/"+ asd; // здесь я выясняю полное название папки  
  8.  
  9.  
  10. //Далее самое главное -  почему то не удается перенести пути ( которые легко и не принужденно выводятся в логи) 
  11. в мой строковый массив  
  12.  
  13. File[] files = new File(falder).listFiles(); 
  14.                                        
  15.   for (File file : files) { 
  16. String allpath = folder + file.getName(); 
  17. a=a+1; 
  18.                               
  19. FilesNames[a]  =  allpath;  
  20.    } 
  21.  


Еще логи положено показывать
Код: [ Загрузить ] [ Скрыть ]
  1. 02-15 19:59:53.069: E/AndroidRuntime(10811): FATAL EXCEPTION: main 
  2. 02-15 19:59:53.069: E/AndroidRuntime(10811): java.lang.NullPointerException 
  3. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at om.example.jk.MainActivity$3.onGroupClick(MainActivity.java:142) 
  4. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:543) 
  5. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:521) 
  6. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 
  7. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.widget.AbsListView$1.run(AbsListView.java:3168) 
  8. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.os.Handler.handleCallback(Handler.java:605) 
  9. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.os.Handler.dispatchMessage(Handler.java:92) 
  10. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.os.Looper.loop(Looper.java:137) 
  11. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at android.app.ActivityThread.main(ActivityThread.java:4424) 
  12. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at java.lang.reflect.Method.invokeNative(Native Method) 
  13. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at java.lang.reflect.Method.invoke(Method.java:511) 
  14. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
  15. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
  16. 02-15 19:59:53.069: E/AndroidRuntime(10811):     at dalvik.system.NativeStart.main(Native Method) 

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 21:44 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
IgNa писал(а):
altwin, у меня не получается перекачать файлы из папки в строковый массив почему то

String[] FilesNames; у тебя объявлен, но не инициализирован(хотя я подробно не смотрел что у тебя там), вообще массивы в java -это отдельная тема, лучше использовать что то вроде
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. ArrayList<String> FilesNames = new ArrayList<String>();
  2.     // тут какие -то действия
  3.     FilesNames.add(allpath);
  4.  

Смысл в том, что массив не изменяемая структура и с ним нужно аккуратно общаться, а ArrayList тот же - более гибкий. Еще лучше подошла бы HashMap к примеру, т.е. ты можешь ключем хранить имя файла, а в значении путь к нему.

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 23:09 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
твой метод мне не подошел, так как он в логи вместо путей true выводил)))

я инициализировал свой, такой строкой allpath = new String[15];
мне конечно надо что бы он был бесконечным, но я не знаю как это сделать поэтому написал число членов к примеру 15

В результате по клику на папку в листвью, я перекачиваю все пути mp3 файлов от туда в свой массив.
Осталось додуматься как этот массив теперь перекинуть в Servicе и там по очереди оттрахать.
воспроизвести)

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 23:16 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
Раньше я вот этим кодом передовал строку в Service
Код: [ Загрузить ] [ Скрыть ]
  1.            bindService(new Intent(this,MusicService.class),   
  2.                     Scon,Context.BIND_AUTO_CREATE);   
  3.             mIsBound = true;       
  4.  
  5.          Intent music = new Intent();   
  6.          music.setClass(this,MusicService.class).putExtra("musicfile", musicfile);   
  7.          startService(music);   
  8.               
  9.               

А теперь надо array ) Ужас ;)
В любом случае спаибо, мишка Гамми

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 23:42 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
Попытка передать array в Service
В Активити
Код: [ Загрузить ] [ Скрыть ]
  1.                 Bundle b=new Bundle();                                 
  2.                 b.putStringArray("key", allpath); 
  3.        
  4.              
  5.                 Intent music=new Intent(MainActivity.this, MusicService.class); 
  6.                 music.putExtras(b); 
  7.                 startService(music);   



В Service что то не то
Код: [ Загрузить ] [ Скрыть ]
  1. public int onStartCommand (Intent intent, int flags, int startId) 
  2.     { 
  3.             
  4.         String[] allpath=intent.getStringArrayExtra("key");  
  5.         musicfile = allpath[0]; 
  6.         try { 
  7.               mPlayer.stop(); 
  8.         }finally { 
  9.          
  10.         } 
  11.              
  12.             try { 
  13.                 mPlayer = new MediaPlayer(); 
  14.                     mPlayer.setDataSource(musicfile); 
  15.             mPlayer.prepare(); 
  16.                 mPlayer.start(); 


Кажись все работает))) осталось бесконечный array научится инициализировать и придумать как проигрывать все файлы из array - вроде не сложно

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2014, 13:32 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
Непоняточка.
В основной активити я создаю строковой массив из содержимого папки
смотрю логи - в нём все пути есть

Передаю этот массив в service через интент ( смотрю логи - тоже всё есть)
Ставлю mPlayer.setOnCompletionListener(this);
пытаюсь загрузить строку из массива - смотрю логи - а массив то уже пустой((

Как он так опустил ? если он объявлен и инициализирован

Объявлен в начале service
String[] allpath;
Инициализирован по создание Service
public void onCreate (){
super.onCreate();
allpath = new String[95];


Help\

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2014, 13:36 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
IgNa писал(а):
ъявлен и инициализирован

Объявлен в начале service
String[] allpath;
Инициализирован по создание Service
public void onCreate (){
super.onCreate();
allpath = new String[95];


Help\

он не инициализирован за пределами метода onCreate. Как я уже говорил лучше использовать
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. ArrayList<String> allpath = new ArrayList<String>();
  2. ...
  3. onCreate() {
  4. ...
  5.   allpath.add("строка")
  6. }
  7.  

опять же надо весь код видеть, если делаешь это в background, не факт что он получает значение на тот момент, когда ты его вызываешь. Можно внутри местода onCreate просто использовать функцию, которая будет его возвращать и обращаться к ней.

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2014, 14:31 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
И такие прибавки вроде слова public не помогут ему быть доступным всегда и везде в service ? (

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2014, 14:36 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
IgNa писал(а):
И такие прибавки вроде слова public не помогут ему быть доступным всегда и везде в service ? (

public -это модификатор доступа. У тебя переменная не смотря на то, что созданна в классе - не инициализированна, когда ты ее инициализируешь в методе, она локальна для него, поскольку onCreate ничего не возвращает. Но вообще если ты создашь массив нужно размера именно там где создаешь переменную то все будет доступно, вот только придут ли туда данные из метода уже другой вопрос :)

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2014, 15:01 
Аватар пользователя

Зарегистрирован: 30 сен 2013, 12:18
Сообщений: 345
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
altwin, ты хочешь сказать что нету способа так объявить и инициализировать мой старый массив allpath = new String[95];
что бы он после формирования в Service был доступен всем методам в Service

И надо переделывать весь код - переходя на совершенно не понятный мне ArrayList<String> allpath = new ArrayList<String>();

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2014, 15:15 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
IgNa писал(а):
altwin, ты хочешь сказать что нету способа так объявить и инициализировать мой старый массив allpath = new String[95];
что бы он после формирования в Service был доступен всем методам в Service

И надо переделывать весь код - переходя на совершенно не понятный мне ArrayList<String> allpath = new ArrayList<String>();

ArrayList<String> - это просто более удобноы и гибкое средство чем простой массив и сним определенно стоит познакомится( http://stackoverflow.com/questions/1409 ... ring-array ). Но если ты сделаешь так:
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. String[] allpath = new String[95];
  2.  

и дальше будешь его заполнять - он будет доступен, но. Во первых это проблема, когда место в нем закончится. Но главное, у тебя же скорее всего код, который "заполняет" массив работает где то в background, а модель java потоков - не гаррантирует порядка выполнения и не факт, что при обращении к массиву нужные данные уже туда попадут. Тут вопрос не столько в том, где хранить строки, сколько в том, как это делать. Если в onCreate ты добавляешь что -то в массив - не делай этого. Создай метод к примеру onDataUpgrade в котором и выполняй вставку, метод возвращает нужный массив и ты просто вызываешь его там же. К примеру что то вроде:
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. ArrayList<String> allpath = new ArrayList<String>();
  2. ...
  3. onCreate() {
  4.   String data = dataStorage.getData().toString();
  5.   onDataUpgrade(data);
  6. }
  7.  
  8. public ArrayList<String> onDataUpgrade(mData) {
  9.   ...  
  10.   return allpath.add(mData);
  11. }
  12.  
  13.  

далее же ты точно знаешь, если метод onDataUpgrade отработал - данные полученны.

_________________
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB