0

我创建了一个简单的应用程序,它使用CastCompanionLibrary将视频文件流式传输到 Google ChromeCast 设备。一切似乎都很好,除了我发现在没有互联网连接的情况下启动手机时应用程序崩溃。我尝试在 ADB 监视器上捕获错误。

java.lang.RuntimeException: Unable to start receiver com.google.android.libraries.cast.companionlibrary.remotecontrol.VideoIntentReceiver: java.lang.IllegalStateException: No VideoCastManager instance was found, did you forget to initialize it?

让我想知道的是,为什么我的应用程序会在手机启动时启动?它应该仅在用户启动时启动。

然而,经过一番挖掘,我相信这与前面提到的 CastCompanionLibrary 有关,它使用清单文件注册了一些服务和接收器。

Manifest.xml 部分

<activity
        android:name="com.google.android.libraries.cast.companionlibrary.cast.player.VideoCastControllerActivity"
        android:screenOrientation="portrait"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:parentActivityName="lv.test.myapp.MainActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="lv.test.myapp.MainActivity" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
    <receiver android:name="com.google.android.libraries.cast.companionlibrary.remotecontrol.VideoIntentReceiver" >
        <intent-filter>
            <action android:name="android.media.AUDIO_BECOMING_NOISY" />
            <action android:name="android.intent.action.MEDIA_BUTTON" />
            <action android:name="com.google.android.libraries.cast.companionlibrary.action.toggleplayback" />
            <action android:name="com.google.android.libraries.cast.companionlibrary.action.stop" />
        </intent-filter>
    </receiver>
    <service
        android:name="com.google.android.libraries.cast.companionlibrary.notification.VideoCastNotificationService"
        android:exported="false" >
        <intent-filter>
            <action
                android:name="com.google.android.libraries.cast.companionlibrary.action.notificationvisibility" />
        </intent-filter>
    </service>
    <service
        android:name="com.google.android.libraries.cast.companionlibrary.cast.reconnection.ReconnectionService"/>
    <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
        </intent-filter>
    </receiver>

主要活动部分

public VideoCastManager mCastManager;    
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

//id changed for public use

    CastConfiguration options = new CastConfiguration.Builder("000000") 
.enableAutoReconnect()
.enableLockScreen()
.enableWifiReconnection()
.enableNotification()
.build();

    if(mCastManager == null) {
        VideoCastManager.initialize(this, options);
    }
    mCastManager = VideoCastManager.getInstance();
//some other not related code here
}

我发现的完整错误

04-07 22:12:32.185 5022-5022/? E/AndroidRuntime: FATAL EXCEPTION: main
                                             Process: lv.test.myapp, PID: 5022
                                             java.lang.RuntimeException: Unable to start receiver com.google.android.libraries.cast.companionlibrary.remotecontrol.VideoIntentReceiver: java.lang.IllegalStateException: No VideoCastManager instance was found, did you forget to initialize it?
                                                 at android.app.ActivityThread.handleReceiver(ActivityThread.java:3114)
                                                 at android.app.ActivityThread.access$1800(ActivityThread.java:181)
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1551)
                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                 at android.os.Looper.loop(Looper.java:145)
                                                 at android.app.ActivityThread.main(ActivityThread.java:6117)
                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
                                              Caused by: java.lang.IllegalStateException: No VideoCastManager instance was found, did you forget to initialize it?
                                                 at com.google.android.libraries.cast.companionlibrary.cast.VideoCastManager.getInstance(VideoCastManager.java:259)
                                                 at com.google.android.libraries.cast.companionlibrary.remotecontrol.VideoIntentReceiver.onReceive(VideoIntentReceiver.java:49)
                                                 at android.app.ActivityThread.handleReceiver(ActivityThread.java:3107)
                                                 at android.app.ActivityThread.access$1800(ActivityThread.java:181) 
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1551) 
                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                 at android.os.Looper.loop(Looper.java:145) 
                                                 at android.app.ActivityThread.main(ActivityThread.java:6117) 
                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                 at java.lang.reflect.Method.invoke(Method.java:372) 
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
04-07 22:12:32.200 2888-3384/? V/ApplicationPolicy: isApplicationStateBlocked userId 0 pkgname lv.test.myapp
4

1 回答 1

1

不知道您使用的是哪个版本的 CCL,但如果您使用的是最新版本,则应更新清单以从接收器块和服务中删除所有意图过滤器。对于接收者,看起来其他人正在尝试调用您的接收者,因此如果您删除意图过滤器,它将成为您的应用程序的私有,并且不会遇到此类问题。

于 2016-04-07T21:25:02.047 回答