LoginSignup
1
1

More than 5 years have passed since last update.

TextureViewでonSurfaceTextureAvailableが呼ばれないときにチェックする事

Posted at

ちょっとググってなかったので、自分用にメモ:pencil:

TextureViewはSurfaceTextureListenerを持っていて、そのInterfaceの1つonSurfaceTextureAvailableは、TextureViewのSurfaceTextureが使用できる状態になると呼び出されます。たいていは、このコールバックが呼べれたときにカメラの初期等を行うかと思います。
今回は、タイトル通りこのコールバックが呼ばれない事象と遭遇しました。

:four_leaf_clover: 検証環境

  • Nexus 5X (8.0)
  • Docomo Galaxy S8+ (7.0)

:hammer: 解決法

AndroidManifest.xml
...
<application
        android:hardwareAccelerated="false"
...        

この項目があるとonSurfaceTextureAvailableリスナーが呼ばれず、いつまでのカメラの初期化処理を呼ぶ事ができずに、黒い画面が表示されてしまいます。

そのときにlogcatに

W/TextureView: A TextureView or a subclass can only be used with hardware acceleration enabled.

というWarningが出るので、そこであたりはつけられると思います。

この事象で注意が必要な事は、端末の開発者向けオプションハードウェアアクセラレーテッドレンダリングGPUレンダリングを使用にチェックが入っていると、描画されてしまう事です。
端末によって問題の切り分けが難しくなってしまいますので、気をつけてください。

という事でandroid:hardwareAccelerated="false"を削除したらプレビューが表示されました。

:paperclip: Refs

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1