我正在创建android应用程序。我成功添加了mediacontroller并在videoview中添加了一个小图标,以便在点击全屏图标时将视频全屏显示到LandScape模式。但是当我点击FullScreen图标时出错。这是我的代码。
详情活动:
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);
}
});
}
}
错误原因记录是:
01-14 09:38:51.908 10500-10500 / com.app.show E / AndroidRuntime:FATAL 例外:主程序:com.zeeshan.echoshow,PID:10500 java.lang.RuntimeException:无法启动活动 ComponentInfo {} com.app.show/com.app.show.DetailsActivity: java.lang.NullPointerException:uriString at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3003) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064) 在android.app.ActivityThread.-wrap14(ActivityThread.java)处 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1659) 在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) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451) 引起: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) 在android.app.Activity.performCreate(Activity.java:6977)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064) 在android.app.ActivityThread.-wrap14(ActivityThread.java)处 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1659) 在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)
应用截图:
答案 0 :(得分:0)
在DetailsActivity,OnCreate方法中,您期望Uri有意图。您没有从FullScreenMediaController
发送您在DetailsActivity中期望的所有数据String vidAddress = intent.getStringExtra("movie_links");
imageCover.setImageResource(image);
Uri vidUri = Uri.parse(vidAddress);
在FullScreenMediaController中,您可以发送Uri,例如:
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);
另外,通过检查:
为空值做好准备 if(vidAddress != null ){
Uri vidUri = Uri.parse(vidAddress);
// some more code here
}