如題,這兩個問題其實是同一個問題,爲什麼這麼說呢?因爲之前獲取SurfaceTexture是在onSurfaceTextureAvailable接口裏操作的,既然onSurfaceTextureAvailable沒回調,獲取的SurfaceTexture爲空,自然沒畫面了。
在我的項目升級targetSdkVersion到29之後就會出現,我並不清楚onSurfaceTextureAvailable接口爲什麼不會執行,不過改完代碼後不妨礙項目正常運行就可以了。
查了資料都說要開啓硬件加速:android:hardwareAccelerated="true"
卵用沒有。
反正在我的小米手機android 10系統上,完全沒有效果。
但是調試發現,除了onSurfaceTextureAvailable這個接口沒響應,其他接口是正常的,例如onSurfaceTextureUpdated,這就足夠了,從onSurfaceTextureUpdated拿SurfaceTexture也一樣
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
//不再從這裏獲取到surface
//surface = new Surface(surfaceTexture);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
if (surface != null) {
surface.release();
}
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
if (surface == null) {
surface = new Surface(surfaceTexture);
}
}
後續再調用mMediaPlayer.setSurface(surface);就有畫面了。