Search code examples
androidtextureviewandroid-textureviewandroid-min-sdk

TextureView setSurfaceTexture method requires API 16 level


TextureView.setSurfaceTexture method requires API level 16, but my current min 14, how can I use this method in 14, 15 API's?

UPDATE (add code)

Layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".view.MainActivity"
    tools:showIn="@layout/activity_main">

    <FrameLayout
        android:id="@+id/videoSurfaceContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextureView
            android:id="@+id/texture_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </FrameLayout>
</RelativeLayout>

and in Fragment's onCreateView method:

View rootView = inflater.inflate(R.layout.content_main, container, false);
    mVideoContainer = rootView.findViewById(R.id.videoSurfaceContainer);
            mTextureView = (TextureView) rootView.findViewById(R.id.texture_view);
            if (mSurfaceTexture != null) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    mTextureView.setSurfaceTexture(mSurfaceTexture);
                }
            }
            mVideoControllerView.setAnchorView((FrameLayout) mVideoContainer);
            mTextureView.setSurfaceTextureListener(this);

Surface texture listener:

@Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
        mSurfaceTexture = surfaceTexture;
        Surface surface = new Surface(mSurfaceTexture);
        mMediaPlayer.setSurface(surface);
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) {
        mSurfaceTexture = surfaceTexture;
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
        mSurfaceTexture = surfaceTexture;
        return false;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
        mSurfaceTexture = surfaceTexture;
    }

Solution

  • TextureView.setSurfaceTexture method requires API level 16

    TextureView.setSurfaceTexture requires API Level 16 or higher.

    No there #is no way right now . You must call API Level 16

    Open your build.gradle section

     defaultConfig {
        minSdkVersion 16    // must use 16 for this 
        targetSdkVersion 19 // set yours as per requirement 
    
    }