在android studio中播放从服务器获取的mp4 url​​列表的代码

Posted

技术标签:

【中文标题】在android studio中播放从服务器获取的mp4 url​​列表的代码【英文标题】:Code to play list of mp4 url fetching from the server in android studio 【发布时间】:2018-01-20 15:50:19 【问题描述】:

我知道以前有很多人问过这些问题,但出于我的要求,我无法得到解决方案。 我在那里创建了主类,我实现了获取视频名称列表并将其放入回收站视图的方法。因此,当用户单击获取 URL 的任何特定视频名称时。所以问题是我如何实现播放该单击项目的逻辑。 主要活动:

public class MainActivity extends AppCompatActivity 

//ProgressDialog mDialog;
VideoView videoView;
Button btnPlayPause;
//ImageButton btnPlayPause;
String videoURL;

ProgressDialog pd;
private final String url_video = "url://xyz.com/abc/video";
private static final int RECOVERY_REQUEST = 1;

private RecyclerView recyclerView;
private VideoListAdapter videoListAdapter;
private ArrayList<VideoDetail> videoDetailsArrayList = new ArrayList<>();

private View.OnClickListener videoItemClickListener = new View.OnClickListener() 
    @Override
    public void onClick(View view) 

        videoURL  =   view.getTag().toString();

        //setVideo();

    
;



@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnPlayPause= (Button) findViewById(R.id.btn_play_pause);
    videoView = (VideoView) findViewById(R.id.videoView1);

    setAdapter();

    loadRequestList();




private void loadRequestList() 

    if (isNetworkAvailable()) 

        pd = new ProgressDialog(MainActivity.this);
        pd.setMessage("Loading data...");
        pd.show();

        //ProgressUtils.getInstance(this).show("Loding Video List........");

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url_video, new Response.Listener<String>() 
            @Override
            public void onResponse(String response) 

                try 
                    //ProgressUtils.getInstance(MainActivity.this).cancel();
                    pd.dismiss();

                    if (TextUtils.isEmpty(response)) 
                        return;
                    
                    VideoDetailsModel videoDetailsModel = VideoResponseHandler.getVideoListDetails(response);
                    // System.out.println("printing Data of video"+videoDetailsModel.getDetails());
                    if (videoDetailsModel == null) 

                        return;
                    

                    if (videoDetailsModel.getDetails() == null) 

                        return;
                    
                    //System.out.println("printing list3\n");

                    videoListAdapter.setVideoList((ArrayList<VideoDetail>) videoDetailsModel.getDetails());
                    //System.out.println("printing list video\n");

                 catch (Throwable e) 
                    e.printStackTrace();
                


            
        , new Response.ErrorListener() 
            @Override
            public void onErrorResponse(VolleyError error) 

                pd.dismiss();

                //ProgressUtils.getInstance(MainActivity.this).cancel();
                Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG);


            
        );

        RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
        requestQueue.add(stringRequest);
    else

        builderDialog(MainActivity.this).show();

    

private AlertDialog.Builder builderDialog(MainActivity listVideoActivity) 

    AlertDialog.Builder builder = new AlertDialog.Builder(listVideoActivity);
    builder.setTitle("No Internet Connection");
    builder.setMessage("You Need To Have Mobile Data or Wifi to access this. Press OK to Exit");

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() 
        @Override
        public void onClick(DialogInterface dialogInterface, int i) 

            startActivity(new Intent(MainActivity.this,MainActivity.class));

            //finish();
        
    );

    return builder;



private boolean isNetworkAvailable() 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activityNetworkInfo = connectivityManager.getActiveNetworkInfo();

    return activityNetworkInfo != null && activityNetworkInfo.isConnected();


private void setAdapter() 

    recyclerView = (RecyclerView) findViewById(R.id.recyclerVideo);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
    videoListAdapter = new VideoListAdapter(videoDetailsArrayList,videoItemClickListener);

    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setAdapter(videoListAdapter);




适配器类如下所示:

public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.MyViewHandler> 

private ArrayList<VideoDetail> videoDetailArrayList = new ArrayList<>();
private View.OnClickListener videoItemClickListener;


public VideoListAdapter(ArrayList<VideoDetail> videoDetailArrayList, View.OnClickListener videoItemClickListener) 
    this.videoDetailArrayList = videoDetailArrayList;
    this.videoItemClickListener = videoItemClickListener;




@Override
public MyViewHandler onCreateViewHolder (ViewGroup parent, int viewType)


    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_video_list, parent, false);


    return new MyViewHandler(view);


@Override
public void onBindViewHolder (MyViewHandler holder,int position)

    if (videoDetailArrayList == null) 
        return;
    
    VideoDetail videoDetail = videoDetailArrayList.get(position);

    if (videoDetail == null) 
        return;
    

    if (holder instance_of MyViewHandler) 

        if (TextUtils.isEmpty(videoDetail.getFileName())) 
            return;
        

        holder.tvVideo.setText(videoDetail.getFileName());
        holder.tvVideo.setTag(videoDetail.getFilePath());
        holder.videoImage.setTag(videoDetail.getFilePath());
        if (videoItemClickListener != null) 
            holder.tvVideo.setOnClickListener(videoItemClickListener);
            holder.videoImage.setOnClickListener(videoItemClickListener);
        
    




@Override
public int getItemCount() 
    return videoDetailArrayList.size();


public class MyViewHandler extends RecyclerView.ViewHolder 

    private final TextView tvVideo;
    private final ImageView videoImage;


    public MyViewHandler(View itemView) 
        super(itemView);

        tvVideo = (TextView) itemView.findViewById(R.id.tvVideo);
        videoImage = (ImageView) itemView.findViewById(R.id.videoImage);

    



public void setVideoList(ArrayList<VideoDetail> videoDetails) 

    if (videoDetails != null) 
        this.videoDetailArrayList = videoDetails;
    

    notifyDataSetChanged();

activity_main.xml 文件:

<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_
android:layout_
android:padding="16dp"
tools:context="com.xyz.videoviewengineersdream.MainActivity">

<VideoView
    android:id="@+id/videoView1"
    android:layout_
    android:layout_
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:id="@+id/btn_play_pause"
    android:layout_
    android:layout_
    android:text="Play"
    android:onClick="videoPlay"
    android:clickable="true"
    android:layout_below="@+id/videoView1"
    android:layout_centerHorizontal="true"
    android:background="@color/colorPrimary"
    android:padding="10dp"
    android:layout_marginTop="10dp"
    android:textColor="#FFF"
    android:textStyle="bold"
    android:textSize="16dp"/>





<View
    android:layout_
    android:layout_
    android:layout_below="@+id/btn_play_pause"
    android:id="@+id/viewView"/>

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerVideo"
    android:layout_below="@+id/viewView"
    android:layout_
    android:layout_/>

【问题讨论】:

【参考方案1】:

你已经创建了VideDetail

private ArrayList<VideoDetail> videoDetailArrayList = new ArrayList<>()

只需将videourl 字段添加到VideoDetail 类,然后您可以直接在按钮单击上获取url,如下图onBindViewHolder 中的@

 final VideDetail videodetail = videolist.get(position);

        holder.yourbtn.setOnClickListener(new View.OnClickListener() 
                        @Override
                        public void onClick(View view) 
                            String url = videdetail.getvideourl();
                           // play video with the url you got 
                        
                );

【讨论】:

实际上是主活动中的视频视图,我在主活动类中获取了该 URL。我的问题是当我单击第一个项目时,它应该在我先单击第二个项目时播放项目应该停止并像这样播放第二个项目我想要的要求。 这样我得到了 URL holder.tvVideo.setText(videoDetail.getFileName()); holder.tvVideo.setTag(videoDetail.getFilePath()); holder.videoImage.setTag(videoDetail.getFilePath()); if (videoItemClickListener != null) holder.tvVideo.setOnClickListener(videoItemClickListener); holder.videoImage.setOnClickListener(videoItemClickListener); 您从 volley 收到视频名称及其各自的网址,对吗?? 是的。只是我想知道如何在回收站视图中点击特定项目来播放视频。 在您的 videoDetailArrayList 中,您正在传递 videonamelist ,还将 videourl 传递给 videoDetailArrayList 然后从 videodetail.getvideourl() 获取 videourl,就像从 videodetail.getfilename() 获取视频名称一样

以上是关于在android studio中播放从服务器获取的mp4 url​​列表的代码的主要内容,如果未能解决你的问题,请参考以下文章

android studio 从服务中获取 Activity 对象

如何从使用directx c# visual studio播放的视频中获取和处理每一帧(位图图像​​)

当用户切换到 Android Studio Kotlin 中的其他页面时,如何停止播放音乐?

Android:如何检测所选音频正在 Android Studio 中播放

已删除的视频显示在 Android Studio 代码的视频播放器中

如何访问数组改造 2 / android studio 中的对象“播放器”