I am developing an app where I have t play videos from Firebase Storage using RecyclerView
.
But when I am trying to declare the MeidaController with context: "this", it is showing error. Please check my code.
The error comes when I am declaring Mediacontroller inside NewsViewHolder. I don't know where to declare the MediaController
.
NewsActivity (Launcher)
package com.cornicore.newsapp;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.VideoView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
public class NewsActivity extends AppCompatActivity {
private RecyclerView mPeopleRV;
private DatabaseReference mDatabase;
private FirebaseRecyclerAdapter<News, NewsActivity.NewsViewHolder> mPeopleRVAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
setTitle("News");
//"News" here will reflect what you have called your database in Firebase.
mDatabase = FirebaseDatabase.getInstance().getReference().child("News");
mDatabase.keepSynced(true);
mPeopleRV = (RecyclerView) findViewById(R.id.myRecycleView);
DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("News");
Query personsQuery = personsRef.orderByKey();
mPeopleRV.hasFixedSize();
mPeopleRV.setLayoutManager(new LinearLayoutManager(this));
FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();
mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsActivity.NewsViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(NewsActivity.NewsViewHolder holder, final int position, final News model) {
holder.setVideo_url(getBaseContext(), model.getVideo_url());
}
@Override
public NewsActivity.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_row, parent, false);
return new NewsActivity.NewsViewHolder(view);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
}
@Override
public void onStart() {
super.onStart();
mPeopleRVAdapter.startListening();
}
@Override
public void onStop() {
super.onStop();
mPeopleRVAdapter.stopListening();
}
public static class NewsViewHolder extends RecyclerView.ViewHolder{
View mView;
public NewsViewHolder(View itemView){
super(itemView);
mView = itemView;
}
public void setVideo_url(Context ctx, String url){
Uri uri = Uri.parse(url);
VideoView videoView = (VideoView) mView.findViewById(R.id.video);
videoView.setVideoURI(uri);
videoView.requestFocus();
videoView.start();
***MediaController mediaController = new MediaController(this);***
videoView.setMediaController(mediaController);
mediaController.setAnchorView(videoView);
videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
ProgressBar progressBar = (ProgressBar) mView.findViewById(R.id.progressBar);
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
progressBar.setVisibility(View.GONE);
return true;
}
else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START){
progressBar.setVisibility(View.VISIBLE);
return true;
}
return false;
}
});
}
}
}