Запуск 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, сделайте это..

  1. Добавьте 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);
           }
      }
    
  2. Убедитесь, что у вас есть все строковые ссылки в вашем 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>
    
  3. В вашем андроиде манифест...

    <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 чтобы увидеть, как он это сделал... вот что я сделал. Отличный плагин, кстати.

Другие вопросы по тегам