0

I am creating android application. I am successful to add mediacontroller and add small icon in the videoview to fullscreen the video to LandScape mode when click on fullscreen icon. But i am having error when click on FullScreen Icon. Here is my Code.

Details Activity :

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;

import org.w3c.dom.Text;

public class DetailsActivity extends AppCompatActivity {
    VideoView vidView;
    TextView description;
    ImageButton mPlayButton;
    TextView movienamedetails;
    TextView movieCategory;
    ImageView imageCover;
    TextView movieDuration;
    TextView movieYear;
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_details);
        vidView=(VideoView) findViewById(R.id.myVideo);
        description=(TextView)findViewById(R.id.tv_description_detail);
        imageCover=(ImageView)findViewById(R.id.imagecoverdetails);
        movienamedetails = (TextView) findViewById(R.id.movienamedetails);
        movieCategory = (TextView) findViewById(R.id.moviecategorty);
        movieDuration = (TextView) findViewById(R.id.movieDuration);
        movieYear = (TextView) findViewById(R.id.moviedate);

        String fullScreen =  getIntent().getStringExtra("fullScreenInd");
        if("y".equals(fullScreen)){
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getSupportActionBar().hide();
        }
        Intent intent = getIntent();

        String desc_detail = intent.getStringExtra("description_details");
        String movie_name = intent.getStringExtra("moviename_details");
        String movie_category = intent.getStringExtra("movie_category");
        String movie_durationz = intent.getStringExtra("movie_duration");
        String movie_time = intent.getStringExtra("movie_year");
        int image = intent.getIntExtra("image",0);
        String vidAddress = intent.getStringExtra("movie_links");
        imageCover.setImageResource(image);
        Uri vidUri = Uri.parse(vidAddress);
        vidView.setVideoURI(vidUri);
        mPlayButton = (ImageButton) findViewById(R.id.play_button);
        mPlayButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                vidView.start();
                // hide button once playback starts
                    mPlayButton.setVisibility(View.GONE);
                }
        });

        MediaController vidControl = new FullScreenMediaController(this);
        vidControl.setAnchorView(vidView);
        vidView.setMediaController(vidControl);
        description.setText(desc_detail);
        movienamedetails.setText(movie_name);
        movieCategory.setText(movie_category);
        movieDuration.setText(movie_durationz);
        movieYear.setText(movie_time);
    }
}

FullScreenMediaController :

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.MediaController;

public class FullScreenMediaController extends MediaController {

    private ImageButton fullScreen;
    private String isFullScreen;

    public FullScreenMediaController(Context context) {
        super(context);
    }

    @Override
    public void setAnchorView(View view) {

        super.setAnchorView(view);

        //image button for full screen to be added to media controller
        fullScreen = new ImageButton(super.getContext());

        FrameLayout.LayoutParams params =
                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.RIGHT;
        params.rightMargin = 80;
        addView(fullScreen, params);

        //fullscreen indicator from intent
        isFullScreen =  ((Activity)getContext()).getIntent().
                getStringExtra("fullScreenInd");

        if("y".equals(isFullScreen)){
            fullScreen.setImageResource(R.drawable.fullscreenexit);
        }else{
            fullScreen.setImageResource(R.drawable.fullscreen);
        }

        //add listener to image button to handle full screen and exit full screen events
        fullScreen.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(getContext(),DetailsActivity.class);

                if("y".equals(isFullScreen)){
                    intent.putExtra("fullScreenInd", "");
                }else{
                    intent.putExtra("fullScreenInd", "y");
                }
                ((Activity)getContext()).startActivity(intent);
            }
        });
    }
}

The log of error cause is :

01-14 09:38:51.908 10500-10500/com.app.show E/AndroidRuntime: FATAL EXCEPTION: main Process: com.zeeshan.echoshow, PID: 10500 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.show/com.app.show.DetailsActivity}: java.lang.NullPointerException: uriString at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3003) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1659) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6823) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451) Caused by: java.lang.NullPointerException: uriString at android.net.Uri$StringUri.(Uri.java:475) at android.net.Uri$StringUri.(Uri.java) at android.net.Uri.parse(Uri.java:437) at com.zeeshan.echoshow.DetailsActivity.onCreate(DetailsActivity.java:63) at android.app.Activity.performCreate(Activity.java:6977) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1659) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6823) at java.lang.reflect.Method.invoke(Native Method)

App Screenshot:

enter image description here

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
ZKhan
  • 37
  • 5
  • You need send again all extra parameters. for repeat it you can just get intent and change `fullScreenInd` param. @Override public void onClick(View v) { Intent intent = ((Activity)getContext()).getIntent(); if("y".equals(isFullScreen)){ intent.putExtra("fullScreenInd", ""); }else{ intent.putExtra("fullScreenInd", "y"); } ((Activity)getContext()).startActivity(intent); } – coder Jan 14 '18 at 11:16
  • its not working because when i click on fullscreen it go back only. – ZKhan Jan 14 '18 at 11:26

1 Answers1

0

In DetailsActivity, OnCreate method you are expecting Uri with intent. You are not sending all the data you are expecting in DetailsActivity from FullScreenMediaController

String vidAddress = intent.getStringExtra("movie_links");
        imageCover.setImageResource(image);
        Uri vidUri = Uri.parse(vidAddress);

In FullScreenMediaController you can send the Uri, something like:

ntent intent = new Intent(getContext(),DetailsActivity.class);

            if("y".equals(isFullScreen)){
                intent.putExtra("fullScreenInd", "");
            }else{
                intent.putExtra("fullScreenInd", "y");
            }
            intent.putExtra("Movie URI Here", "movie_links");
            ((Activity)getContext()).startActivity(intent);

In addition be prepared for null value by checking:

    if(vidAddress != null ){
       Uri vidUri = Uri.parse(vidAddress);
// some more code here

}
Raviprakash
  • 2,410
  • 6
  • 34
  • 56