Запуск Vitamio в сервисе от Cordova Plugin
Примерно через неделю... я думаю, что пришло время спросить SO сообщества:)
Теперь у меня уже есть рабочий (незавершенный) плагин, который уже делает это.
Java-файл, который расширяет CordovaPlugin:
Intent objIntent = new Intent(cordovaObj.getActivity().getApplicationContext(), MY_SERVICE.class);
//pass the url to the service
objIntent.putExtra("mediaUrl", url);
//Start the service
cordovaObj.getActivity().getApplicationContext().startService(objIntent);
Затем в методе службы onCreate я устанавливаю родной класс MediaPlayer для андроидов и onStartCommand() службы запускаю проигрыватель. У меня также есть метод остановки. Как только я начал работать, я захотел обменять класс медиаплеера andriod на класс Витамио.
Я сделал следующее https://github.com/yixia/VitamioBundle/wiki/Getting-Started
У них было четыре простых инструкции, четвертая из которых была: "Теперь вы можете использовать Vitamio Media API так же, как Android Media API"...??.. эм..но
Все файлы должны быть в нужных местах, и манифест имеет надлежащие объявления действий и служб, но после компиляции мое приложение вылетает на lauch.
Шаг 3 - моя проблема, которую я не могу назвать
if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
В методе onCreate в моем классе обслуживания я получаю и ошибку. Я попытался поместить это в onCreate моей MainActivity, но получил сбой при запуске
LAUNCH SUCCESS
E/AndroidRuntime(23282): java.lang.RuntimeException: Unable to start activity ComponentInfo{biz.urassociation.app/biz.urassociation.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaInterfaceImpl.setActivityResultRequestCode(int)' on a null object reference
E/AndroidRuntime(23282): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaInterfaceImpl.setActivityResultRequestCode(int)' on a null object reference
E/AndroidRuntime(23282): at org.apache.cordova.CordovaActivity.startActivityForResult(CordovaActivity.java:331)
Основная проблема в том, что если я буду использовать это в действии, я не буду вынужден использовать интерфейс?
Я просто хочу транслировать аудио в фоновом режиме, пока пользователь может перемещаться по моему приложению и использовать BroadcastReceiver намерен остановить, приостановить, seekTo... и т. Д. Из плагина в службу или вернуть позицию или состояния игрока.
Может кто-нибудь помочь??
По сути, я хочу использовать vitamio без вдов, виджетов, интерфейса плеера и т. Д. Я буду управлять этим с помощью плагина cordova. Как я могу использовать vitamio таким образом... любая помощь будет отличной.
Плагин Vitamio-Cor dova-Plugin работает очень хорошо и воспроизводит потоки HLS, которые обычно не работают должным образом, используя собственный MediaPlayer... но я просто хочу воспроизводить звук... Я закомментировал весь код интерфейса, но все равно получаю невидимый окно, которое мешает мне использовать мое приложение, пока я не нажму кнопку назад. Я не хочу просто использовать ndroid:theme="@android:style/Theme.NoDisplay" и модифицировать плагин, который проигрыватель должен запускать как службу... это в любом случае будет правильным для аудиоплеера. Еще раз спасибо за помощь, я действительно старался изо всех сил, что я знаю, но, наконец, я прошу вашей помощи.
1 ответ
Вот это да. Не могу поверить, что я пропустил это в журналах.
Я не объявлял необходимые строковые ресурсы, которые используются методами инициализации vitamio:/ ..located в res/values /strings.xml ... теперь все работает нормально.
Короче говоря, если вы используете Cordova, сделайте это..
Добавьте vitamio init в MainActivity, это должно выглядеть так
import io.vov.vitamio.LibsChecker; //don't forget to import this!
public class MainActivity extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!LibsChecker.checkVitamioLibs(this)) return; // Set by <content src="index.html" /> in config.xml loadUrl(launchUrl); } }
Убедитесь, что у вас есть все строковые ссылки в вашем plugin.xml, вот так
<config-file target="res/values/strings.xml" parent="/resources"> <string name="vitamio_library_app_name">VitamioLibrary</string> <string name="vitamio_init_decoders">Initializing decoders…</string> <string name="permission_group_tools_label">Vitamio tools</string> <string name="permission_group_tools_description">Access Vitamio package and resources.</string> <string name="permission_receive_messages_label">Receive Vitamio messages</string> <string name="permission_receive_messages_description">Receive all broadcasts from Vitamio service.</string> <string name="permission_write_providers_label">Write Vitamio providers</string> <string name="permission_write_providers_description">Delete, update or create new items in Vitamio providers.</string> <string name="VideoView_error_title">Cannot play video</string> <string name="VideoView_error_text_invalid_progressive_playback">Sorry, this video is not valid for streaming to this device.</string> <string name="VideoView_error_text_unknown">Sorry, this video cannot be played.</string> <string name="VideoView_error_button">OK</string> <string name="mediacontroller_play_pause">Play/Pause</string> </config-file>
В вашем андроиде манифест...
<activity android:name="io.vov.vitamio.activity.InitActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden" android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar" android:windowSoftInputMode="stateAlwaysHidden"/> <activity android:configChanges="orientation|keyboardHidden|navigation" android:launchMode="singleTop" android:name="io.vov.vitamio.activity.InitActivity" android:theme="@android:style/Theme.NoDisplay" android:windowSoftInputMode="stateAlwaysHidden" />
Теперь вы сможете использовать класс vitamio Media как обычно. В какой-то момент я собираюсь написать учебник по этому вопросу, чтобы спасти людей от сумасшествия:}
Между прочим, убедитесь, что у вас установлена библиотека vitamio, а также посмотрите на https://github.com/nchutchind/Vitamio-Cordova-Plugin чтобы увидеть, как он это сделал... вот что я сделал. Отличный плагин, кстати.