2016-08-03 12 views
0

アプリのロック画面のアートワークをv2.7.0として表示するにはどうすればよいですか。私は決断なしにこれについて約2日間の最善の部分を費やしました。Chromecast Sender v2.7.0 lockscreen画像

v2.7.0ライブラリは現在VideoCastManager.javaクラスに次の方法があります:私は私自身のカスタムイメージ、結果なしでalbum_art_placeholder_large描画可能にswaping試してみました

private void setBitmapForLockScreen(MediaInfo video) { 
    if (video == null || mMediaSessionCompat == null) { 
     return; 
    } 
    Uri imgUrl = null; 
    Bitmap bm = null; 
    List<WebImage> images = video.getMetadata().getImages(); 
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) { 
     if (images.size() > 1) { 
      imgUrl = images.get(1).getUrl(); 
     } else if (images.size() == 1) { 
      imgUrl = images.get(0).getUrl(); 
     } else if (mContext != null) { 
      // we don't have a url for image so get a placeholder image from resources 
      bm = BitmapFactory.decodeResource(mContext.getResources(), 
        R.drawable.album_art_placeholder_large); 
     } 
    } else if (!images.isEmpty()) { 
     imgUrl = images.get(0).getUrl(); 
    } else { 
     // we don't have a url for image so get a placeholder image from resources 
     bm = BitmapFactory.decodeResource(mContext.getResources(), 
       R.drawable.album_art_placeholder); 
    } 
    if (bm != null) { 
     MediaMetadataCompat currentMetadata = mMediaSessionCompat.getController().getMetadata(); 
     MediaMetadataCompat.Builder newBuilder = currentMetadata == null 
       ? new MediaMetadataCompat.Builder() 
       : new MediaMetadataCompat.Builder(currentMetadata); 
     mMediaSessionCompat.setMetadata(newBuilder 
       .putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bm) 
       .build()); 
    } else { 
     if (mLockScreenFetchTask != null) { 
      mLockScreenFetchTask.cancel(true); 
     } 
     mLockScreenFetchTask = new FetchBitmapTask() { 
      @Override 
      protected void onPostExecute(Bitmap bitmap) { 
       if (mMediaSessionCompat != null) { 
        MediaMetadataCompat currentMetadata = mMediaSessionCompat.getController() 
          .getMetadata(); 
        MediaMetadataCompat.Builder newBuilder = currentMetadata == null 
          ? new MediaMetadataCompat.Builder() 
          : new MediaMetadataCompat.Builder(currentMetadata); 
        mMediaSessionCompat.setMetadata(newBuilder 
          .putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap) 
          .build()); 
       } 
       mLockScreenFetchTask = null; 
      } 
     }; 
     mLockScreenFetchTask.execute(imgUrl); 
    } 
} 

を。また、次の行を介してビットマップを追加しようとしました:

putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bm) 

しかし何も動作しません。私はここで何が欠けているのですか?ロックスクリーンのアートワークを表示するためにキーを使用する必要がありますか? また、間違った場所を探していますか?

私が試してみましたいくつかの他のリンクが、無駄に:今のようなオンライン

Android MediaMetadata image on lockscreen is zoomed

Adding more fields in MediaMetada GoogleCast

文書が非常に悪く、あまり役に立ちません。

ありがとうございます!

EDIT:さらに調査すると、ロック画面イメージを表示するためにデバイスをロックしてから15-20分かかるようです。理由は分かりません。

EDIT 2:setupMediaSessionメソッド。

private void setUpMediaSession(final MediaInfo info) { 
     if (!isFeatureEnabled(CastConfiguration.FEATURE_LOCKSCREEN)) { 
      return; 
     } 
     if (mMediaSessionCompat == null) { 
      ComponentName mediaEventReceiver = new ComponentName(mContext, 
        VideoIntentReceiver.class.getName()); 
      mMediaSessionCompat = new MediaSessionCompat(mContext, "TAG", mediaEventReceiver, 
        null); 
      mMediaSessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS 
        | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); 
      mMediaSessionCompat.setActive(true); 
      mMediaSessionCompat.setCallback(new MediaSessionCompat.Callback() { 
       @Override 
       public boolean onMediaButtonEvent(Intent mediaButtonIntent) { 
        KeyEvent keyEvent = mediaButtonIntent 
          .getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
        if (keyEvent != null && (keyEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PAUSE 
          || keyEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PLAY)) { 
         toggle(); 
        } 
        return true; 
       } 

       @Override 
       public void onPlay() { 
        toggle(); 
       } 

       @Override 
       public void onPause() { 
        toggle(); 
       } 

       private void toggle() { 
        try { 
         togglePlayback(); 
        } catch (CastException | TransientNetworkDisconnectionException | 
         NoConnectionException e) { 
         LOGE(TAG, "MediaSessionCompat.Callback(): Failed to toggle playback", e); 
        } 
       } 
      }); 
     } 

     mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, 
       AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); 

     PendingIntent pi = getCastControllerPendingIntent(); 
     if (pi != null) { 
      mMediaSessionCompat.setSessionActivity(pi); 
     } 
     if (info == null) { 
      mMediaSessionCompat.setPlaybackState(new PlaybackStateCompat.Builder() 
       .setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f).build()); 
     } else { 
      mMediaSessionCompat.setPlaybackState(new PlaybackStateCompat.Builder() 
       .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) 
       .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE).build()); 
     } 

     // Update the media session's image 
     updateLockScreenImage(info); 

     // update the media session's metadata 
     updateMediaSessionMetadata(); 

     mMediaRouter.setMediaSessionCompat(mMediaSessionCompat); 
    } 
+0

ここで、 'mMediaSessionCompat.setActive(true)'を呼び出しますか? setupMediaSessionメソッドの中の – ianhanniballake

+0

@ianhanniballake。私はデフォルトの2.7.0ライブラリをそのまま使用しています。私は上記の方法で質問を更新しました。 – user2511882

答えて

0

MediaInfoを定義したときに「より大きな」アルバムアートを定義しましたか? CCLはあなたが小さなものを持っているとみなし、通知とミニコントローラとメディアルータコントローラのダイアログで使用されるindex = 0として設定し、lockscreenに使用される大きなもの(MediaInfoの第2のイメージ、index = 1)フルスクリーンのリモコンです。これらの画像がある場合、CCLは自動的にそれらの画像を使用します。テストとして、CastVideos-android(v2)を実行し、それが機能するかどうかを確認します。

+0

setBitmapForLockScreenメソッド内でgetMetaData()。getImages()コールについて説明していますか?私はその方法をデバッグしていましたが、明らかにWeb画像のリストは0に戻っています。しかし、拡張コントロール、通知、ミニコントローラはすべて正しい画像を表示します – user2511882

+0

画像がヌルであっても、まだピックアップのデフォルトのalbum_art_placeholder_largeを表示し、何も利用できない場合はそれを表示する必要がありますか? – user2511882

+0

私が提案したように、CastVideos-v2を試してみてください。 –

関連する問題