Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android remoteMediaPlayer.requestStatus(…)返回所需的状态码签名_Android_Google Play Services_Chromecast_Google Cast - Fatal编程技术网

Android remoteMediaPlayer.requestStatus(…)返回所需的状态码签名

Android remoteMediaPlayer.requestStatus(…)返回所需的状态码签名,android,google-play-services,chromecast,google-cast,Android,Google Play Services,Chromecast,Google Cast,我有一个在谷歌Chromecast上播放直播电台的广播应用程序。使用remoteMediaPlayer.load(…)启动流工作正常。 但是remoteMediaPlayer.requestStatus(…)稍后停止流时说statusCode=SIGN\u IN\u REQUIRED并抛出IllegalStateException:无当前媒体会话 public static void stop() { try { mRemoteMediaPlayer.requestSta

我有一个在谷歌Chromecast上播放直播电台的广播应用程序。使用remoteMediaPlayer.load(…)启动流工作正常。 但是
remoteMediaPlayer.requestStatus(…)
稍后停止流时说
statusCode=SIGN\u IN\u REQUIRED
并抛出
IllegalStateException:无当前媒体会话

public static void stop() {
    try {
        mRemoteMediaPlayer.requestStatus(apiClient).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {

            @Override
            public void onResult(RemoteMediaPlayer.MediaChannelResult mediaChannelResult) {
                Status status = mediaChannelResult.getStatus();
                Utils.log(TAG, "RemoteMediaPlayer requestStatus: Status=" + status.getStatus());
                try {
                    mRemoteMediaPlayer.stop(apiClient);
                } catch (Exception e) {
                    Log.e(TAG, "Exception while stopping GoogleApiClient. ", e);
                }
            }
        });
    } catch (IllegalStateException e) {
        Log.e(TAG, "Problem occurred while geting requestStatus", e);
    } catch (Exception e) {
        Log.e(TAG, "Exception while geting requestStatus. ", e);
    }
}
为什么我不能停止播放实况广播流?或者如何停止remoteMediaPlayer播放

直播的无线电流是HTTP。这可能是问题所在吗

详情如下:

下面的代码启动流并使其工作

    MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MUSIC_TRACK);
    mediaMetadata.putString(MediaMetadata.KEY_TITLE, stationName);
    mediaMetadata.addImage(new WebImage(Uri.parse(imageUrl)));
    final MediaInfo mediaInfo = new MediaInfo.Builder(stationUrl).setContentType("audio/mp3").setStreamType(MediaInfo.STREAM_TYPE_LIVE)
            .setMetadata(mediaMetadata).build();
    try {
        mRemoteMediaPlayer.load(apiClient, mediaInfo, true).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
            @Override
            public void onResult(MediaChannelResult result) {
                if (result.getStatus().isSuccess()) {
                    Utils.log(TAG, "Media loaded successfully: " + result.getStatus());
                } else {
                    Utils.log(TAG, "Media loaded NOT successfully: " + result.getStatus());
                }
            }
        });
    } catch .... {
日志:

05-25 06:19:58.360: D/CastHelper(30561): RemoteMediaPlayer requestStatus: Status=Status{statusCode=SIGN_IN_REQUIRED, resolution=null}
05-25 06:19:58.360: E/CastHelper(30561): Exception while stopping GoogleApiClient. 
05-25 06:19:58.360: E/CastHelper(30561): java.lang.IllegalStateException: No current media session
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.internal.es.dC(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.internal.es.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.cast.RemoteMediaPlayer$4.a(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.cast.RemoteMediaPlayer$4.a(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.common.api.a$b.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.common.api.b.a(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.common.api.b.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.cast.RemoteMediaPlayer.stop(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.cast.RemoteMediaPlayer.stop(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.mydomain.myapp.CastHelper$8.onResult(CastHelper.java:97)
05-25 06:19:58.360: E/CastHelper(30561):    at com.mydomain.myapp.CastHelper$8.onResult(CastHelper.java:1)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.common.api.a$c.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at com.google.android.gms.common.api.a$c.handleMessage(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-25 06:19:58.360: E/CastHelper(30561):    at android.os.Looper.loop(Looper.java:136)
05-25 06:19:58.360: E/CastHelper(30561):    at android.app.ActivityThread.main(ActivityThread.java:5579)
05-25 06:19:58.360: E/CastHelper(30561):    at java.lang.reflect.Method.invokeNative(Native Method)
05-25 06:19:58.360: E/CastHelper(30561):    at java.lang.reflect.Method.invoke(Method.java:515)
05-25 06:19:58.360: E/CastHelper(30561):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
05-25 06:19:58.360: E/CastHelper(30561):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
05-25 06:19:58.360: E/CastHelper(30561):    at dalvik.system.NativeStart.main(Native Method)

您想使用
停止
而不是暂停有什么原因吗?您可以调用
停止
,但请注意,在调用
停止
后,您需要重新连接媒体频道,然后加载下一个媒体,这就是为什么在这种情况下仅使用
暂停
更方便的原因。如果要加载另一个流,也不需要调用
pause
;只需在第一个媒体播放时加载第二个媒体就可以了。

有什么原因让您使用
stop
而不是说
pause
?您可以调用
停止
,但请注意,在调用
停止
后,您需要重新连接媒体频道,然后加载下一个媒体,这就是为什么在这种情况下仅使用
暂停
更方便的原因。如果要加载另一个流,也不需要调用
pause
;只需在第一个媒体播放时加载第二个媒体就可以了。

toString()并不是获取状态代码的好方法。RemoteMediaPlayer有自己的一组状态代码。所需的SIGN_IN_为4,即RemoteMediaPlayer.STATUS_已被替换,这意味着您发出了与此请求相同类型的另一个请求。根据设计,RemoteMediaPlayer只跟踪每种类型的一个请求。例如,如果在第一个暂停请求完成之前发送一个暂停,然后再发送另一个暂停(即,接收到来自接收者的回复),它将停止跟踪第一个暂停并报告此错误。

toString()并不是获取状态码的好方法。RemoteMediaPlayer有自己的一组状态代码。所需的SIGN_IN_为4,即RemoteMediaPlayer.STATUS_已被替换,这意味着您发出了与此请求相同类型的另一个请求。根据设计,RemoteMediaPlayer只跟踪每种类型的一个请求。例如,如果您在第一个暂停请求完成之前发送一个暂停,然后再发送另一个暂停(即,接收到来自接收者的回复),则它将停止跟踪第一个暂停并报告此错误。

暂停也将是一个选项,但也不起作用。该错误甚至在暂停之前发生-在
requestStatus
。我发现
load
对用户来说总是很好的,但是在第二次调用
load
后我看到的日志中,还显示了
statusCode=SIGN\u-in\u-REQUIRED
。奇怪的是,实时流运行良好,不需要登录。为什么
load
在不中断应用程序的情况下工作,但
pause
stop
不工作-即使它们都获得相同的状态
SIGN\u REQUIRED
??
statusCode=SIGN\u IN\u REQUIRED
来自哪里?谢谢<代码>暂停
也是一个选项,但也不起作用。该错误甚至在暂停之前发生-在
requestStatus
。我发现
load
对用户来说总是很好的,但是在第二次调用
load
后我看到的日志中,还显示了
statusCode=SIGN\u-in\u-REQUIRED
。奇怪的是,实时流运行良好,不需要登录。为什么
load
在不中断应用程序的情况下工作,但
pause
stop
不工作-即使它们都获得相同的状态
SIGN\u REQUIRED
??
statusCode=SIGN\u IN\u REQUIRED
来自哪里?谢谢感谢您指出我“发出了另一个相同类型的请求”。我在应用程序的早期将RemoteMediaPlayer初始化为。在开始播放之前实例化RemoteMediaPlayer解决了我的问题。谢谢你的帮助!感谢您指出我“发出了另一个相同类型的请求”。我在应用程序的早期将RemoteMediaPlayer初始化为。在开始播放之前实例化RemoteMediaPlayer解决了我的问题。谢谢你的帮助!