从 Cordova 插件在服务中启动 Vitamio

Starting Vitamio In A Service From 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 方法中我实例化 androids 本地 MediaPlayer class 和服务的 onStartCommand() 我启动播放器。我也有一个停止方法。一旦我开始工作,我想尝试将 andriod 媒体播放器 class 与 Vitamio 的媒体播放器交换。

我做了以下操作https://github.com/yixia/VitamioBundle/wiki/Getting-Started

他们有四个简单的说明,第 4 个是.. "Now you can use Vitamio Media API same as Android Media API"...??..嗯..没有

将所有文件放在正确的位置并且清单具有正确的活动和服务声明,但编译后我的应用程序在启动时崩溃。

第 3 步是我的问题,我无法调用

if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))

在我服务的 onCreate 方法中 class 我得到了错误。我尝试将它放在我的 MainActivity 的 onCreate 中,但在启动时崩溃了

    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)

主要问题是如果在 activity 中使用它,我不会被迫使用接口吗?

我只想在后台播放音频,而用户可以导航我的应用程序并使用 BroadcastReceiver 意图从插件到服务或 return 位置或播放器停止、暂停、seekTo...等州。

有人能帮忙吗??

基本上我想在没有寡妇、小部件、播放器界面等的情况下使用 vitamio 我将从 cordova 插件控制它。我怎样才能以这种方式使用 vitamio...任何帮助都会很棒。

Vitamio-Cor dova-Plugin 非常 可以播放 HLS 流,使用本机 MediaPlayer 通常无法正常工作...但我只想播放音频。 ..我注释掉了所有界面代码,但我仍然得到一个不可见的 window 阻止我使用我的应用程序,直到我点击后退按钮。我不想只使用 ndroid:theme="@android:style/Theme.NoDisplay" 并修改播放器应该 运行 作为服务的插件......那会无论如何都是音频播放器的正确方法。再次感谢您的帮助,我已经尽我所能,但最后还是请求您的帮助。

哇。不敢相信我在日志中错过了这个。

我没有声明 vitamio 的初始化方法使用的必要字符串资源:/ ..位于 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. 在您的 android 清单中...

    <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 class。 在某个时候我会写一个教程来避免人们发疯:}

顺便说一句,显然要确保你也安装了 vitamio 库,你可以查看 https://github.com/nchutchind/Vitamio-Cordova-Plugin 看看他是怎么做到的……这就是我所做的。很棒的插件顺便说一句。