2015-11-24 2 views
1

У меня есть приложение на Google Play, что потоки музыки с радиостанции, построенной по последнему слову Кордову (5.4), и я использую некоторые из основных плагинов, таких как:Cordova медиа плагин перестал работать на Android 6

  • устройства плагин
  • пешеходного WebView плагин
  • диалоги плагин
  • ...
  • файлов плагин
  • медиа плагин

В Android 5.0+ потоковая передача работает отлично, но недавно, когда я обновил свою связь в Android-версии 6.0, потоковая передача остановилась. Я обновил медиа и файловый плагин до последних версий (2.0.0 и 4.0.0 соответственно), поскольку в своем блоге cordova заявила, что эти версии поддерживают новую проверку разрешений на Android 6, но потоковая передача не работает. Журнал дает мне это:

11-24 23:53:35.347 15184-15184/com.uni.app E/chromium: [ERROR:xwalk_autofill_client.cc(170)] Not implemented reached in virtual void xwalk::XWalkAutofillClient::OnFirstUserGestureObserved() 
11-24 23:53:40.395 15184-15235/com.uni.app D/MediaPlayer: setSubtitleAnchor in MediaPlayer 
11-24 23:53:40.410 15184-15235/com.uni.app W/MediaPlayer: Stream has no duration and is therefore not seekable. 
11-24 23:53:40.410 15184-15235/com.uni.app E/MediaPlayer: error (-2147483648, 0) 
11-24 23:53:40.410 15184-15235/com.uni.app D/AudioPlayer: Send a onStatus update for the new seek 
11-24 23:53:40.410 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":3,"value":0}} 
11-24 23:53:40.411 15184-15235/com.uni.app E/MediaPlayer: start called in state 0 
11-24 23:53:40.411 15184-15235/com.uni.app E/MediaPlayer: error (-38, 0) 
11-24 23:53:40.412 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":1,"value":2}} 
11-24 23:53:40.412 15184-15235/com.uni.app E/MediaPlayer: Attempt to call getDuration without a valid mediaplayer 
11-24 23:53:40.412 15184-15235/com.uni.app E/MediaPlayer: error (-38, 0) 
11-24 23:53:40.412 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":2,"value":314586.9375}} 
11-24 23:53:40.413 15184-15235/com.uni.app E/MediaPlayer: Error (-2147483648,0) 
11-24 23:53:40.413 15184-15235/com.uni.app D/AudioPlayer: on completion is calling stopped 
11-24 23:53:40.414 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":1,"value":4}} 
11-24 23:53:40.414 15184-15235/com.uni.app E/MediaPlayer: Error (-38,0) 
11-24 23:53:40.414 15184-15235/com.uni.app D/AudioPlayer: on completion is calling stopped 
11-24 23:53:40.414 15184-15235/com.uni.app E/MediaPlayer: Error (-38,0) 
11-24 23:53:40.414 15184-15235/com.uni.app D/AudioPlayer: on completion is calling stopped 
11-24 23:53:53.476 15184-15184/com.uni.app E/chromium: [ERROR:xwalk_autofill_client.cc(170)] Not implemented reached in virtual void xwalk::XWalkAutofillClient::OnFirstUserGestureObserved() 
11-24 23:53:58.409 15184-15232/com.uni.app E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaed05f70 
11-24 23:53:58.419 15184-15184/com.uni.app W/ScreenOrientationListener: Removing an inexistent observer! 
11-24 23:53:58.419 15184-15184/com.uni.app E/chromium: [ERROR:runtime_javascript_dialog_manager.cc(69)] Not implemented reached in virtual void xwalk::RuntimeJavaScriptDialogManager::ResetDialogState(content::WebContents*) 
11-24 23:53:58.453 15184-15184/com.uni.app D/AudioPlayer: renaming /storage/emulated/0/tmprecording.3gp to /storage/emulated/0/http://IPADDRESS:PORT/; 
11-24 23:53:58.454 15184-15184/com.uni.app E/AudioPlayer: FAILED renaming /storage/emulated/0/tmprecording.3gp to /storage/emulated/0/http://IPADDRESS:PORT/; 
11-24 23:53:58.465 15184-15197/com.uni.app E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb3978f90 

Ipaddress: PORT реальный http://ipaddress:port поток URL, который работает отлично.

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

Любая помощь приветствуется

+0

какая версия медиа-плагина вы используете? сегодня новая версия была выпущена с поддержкой android 6 – jcesarmobile

+0

@jcesarmobile Я отвечаю на это в своем вопросе. Это media v2.0.0, это версия кордовы, выпущенная для поддержки Android 6. –

+0

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

ответ

1

Проверено на Github в официальном репо и обнаружили this

Пробовал на новое приложение образца и работал отлично на моем Android 6.0. Решение близко к тому, что предложил удачакаши с некоторыми дополнительными комментариями.

0

Кажется, что-то не так с Пешеходный переход, вы попробуйте, если вы удалите плагин Пешеходный переход? И ваше устройство Android 6.0 64-бит?

+0

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

2

Я нашел эту проблему, просто закомментируйте эту строку на AudioPlayer.java

public void onPrepared(MediaPlayer player) { 
    // Listen for playback completion 
    this.player.setOnCompletionListener(this); 
    // seek to any location received while not prepared 
    //this.seekToPlaying(this.seekOnPrepared); 
    // If start playing after prepared 
    if (!this.prepareOnly) { 
     this.player.start(); 
     this.setState(STATE.MEDIA_RUNNING); 
     this.seekOnPrepared = 0; //reset only when played 
    } else { 
     this.setState(STATE.MEDIA_STARTING); 
    } 
    // Save off duration 
    this.duration = getDurationInSeconds(); 
    // reset prepare only flag 
    this.prepareOnly = true; 

    // Send status notification to JavaScript 
    sendStatusChange(MEDIA_DURATION, null, this.duration); 
} 
Смежные вопросы