Youtube Playlist shown in ListView

后端 未结 1 1994
栀梦
栀梦 2021-01-05 19:09

I have a GDATA link that I want to use in my App. This link contains a playlist and I want that playlist to be displayed in a ListView. The user wi

相关标签:
1条回答
  • 2021-01-05 19:23

    I hope this will give you an idea try this (just a sample) and if you have better solutions pls let me know too.

     package com.test.utubevdo;
    
        import java.io.BufferedReader;
        import java.io.IOException;
        import java.io.InputStream;
        import java.io.InputStreamReader;
        import java.net.HttpURLConnection;
        import java.net.MalformedURLException;
        import java.net.URL;
        import java.util.ArrayList;
    
        import org.apache.http.HttpResponse;
        import org.apache.http.client.HttpClient;
        import org.apache.http.client.methods.HttpGet;
        import org.apache.http.impl.client.DefaultHttpClient;
        import org.json.JSONArray;
        import org.json.JSONObject;
    
        import android.app.Activity;
        import android.app.Dialog;
        import android.app.ListActivity;
        import android.app.ProgressDialog;
        import android.content.Intent;
        import android.graphics.Bitmap;
        import android.graphics.BitmapFactory;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.os.Handler;
        import android.os.Message;
        import android.view.ContextMenu;
        import android.view.ContextMenu.ContextMenuInfo;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.view.WindowManager;
        import android.widget.AdapterView;
        import android.widget.AdapterView.OnItemClickListener;
        import android.widget.Button;
        import android.widget.Gallery;
        import android.widget.ListView;
        import android.widget.VideoView;
    
    
        public class AndroidThumbnailList extends Activity{
            ArrayList <YTBVideo> videos = new ArrayList<YTBVideo>();
    
        ProgressDialog progressDialog = null;
        VideoView vdovw_1 = null;
        String vdoURL = "";
        ListView listview = null;
        Gallery gallery = null;
        Dialog noDataAlert = null;
    
    
        Handler imageLoaderHandler = new Handler() {
            public void handleMessage(final Message msg) {
                progressDialog.dismiss();
                if(msg.what == 1){
    
                    showErrorMessage("Communication Error", "Error Occured while retrieving the data from Youtube.\n Please try again");
    
                }else{
                System.out.println("videos  ::"+videos.size());
                //listview.setAdapter(new VideoViewAdapter(AndroidThumbnailList.this, videos));
                gallery.setAdapter(new VideoViewAdapter1(AndroidThumbnailList.this, videos));
                }
    
            }
        };
    
    
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    
             getWindow().setFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
            //setContentView(R.layout.imagelist_layout);
            //listview = (ListView)findViewById(R.id.listView1);
             setContentView(R.layout.gallery_imagelist_layout);
             gallery  = (Gallery) findViewById(R.id.galleryView);
    
             gallery.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView parent, View view, int position, long id) {
                        Intent videoDisplayIntent =  new Intent("com.test.utubevdo.VIEW_VIDEO");
                        System.out.println("String.valueOf(view.getTag())  :::"+((YTBVideo)videos.get(position)).getId());
                        videoDisplayIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        videoDisplayIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        videoDisplayIntent.putExtra("VIDEO_ID", ((YTBVideo)videos.get(position)).getId());
                        startActivity(videoDisplayIntent);
                    }
                    });
            progressDialog = ProgressDialog.show(this, "Loading Video Images", "Loading Video Images", true, false);
            //  setListAdapter(new MyThumbnaildapter(AndroidThumbnailList.this, R.layout.row, videoFileList));
        }
    
    
        /*@Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            // TODO Auto-generated method stub
            super.onCreateContextMenu(menu, v, menuInfo);
    
        }*/
    
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            try{
                DownloaderTAsk downloaderTAsk = (DownloaderTAsk) new DownloaderTAsk().execute(getApplicationContext());
    
    
            }catch (Exception e) {
                // TODO: handle exception
            }
        }
    
    
        class DownloaderTAsk extends AsyncTask{
    
            @Override
            protected Object doInBackground(Object... arg0) {
                // TODO Auto-generated method stub
                try{
                    printVideoFEEJSONString("http://gdata.youtube.com/feeds/api/videos?alt=jsonc&q=football+-soccer&orderby=published&start-index=11&max-results=10&v=2");
                    //printVideoFEEJSONString("https://gdata.youtube.com/feeds/api/videos?alt=json&q=football+-soccer&orderby=published&start-index=11&max-results=10&v=2");
                    imageLoaderHandler.sendEmptyMessage(0);
                }catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
    
                    imageLoaderHandler.sendEmptyMessage(1);
    
                }
                return null;
            }
            @Override
            protected void onPostExecute(Object result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
    
            }
    
        }
    
    
    
        public void printVideoFEEJSONString(String feedURL){
            BufferedReader bufferedReader = null;
            try{
                HttpClient client = new DefaultHttpClient();
    
                HttpGet request = new HttpGet(feedURL);
                HttpResponse response = client.execute(request);
    
                bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer jsonStringBuffer = new StringBuffer("");
                String line = "";
                String newLine = System.getProperty("line.separator");
                while ((line = bufferedReader.readLine()) != null) {
                    jsonStringBuffer.append(line + newLine);
                }
    
                String appUpdatorJsonString = jsonStringBuffer.toString();
                System.out.println("YOUTUBE VIDEO FEED JSON :"+appUpdatorJsonString);
    
                JSONObject updaterAppJsonObject = new JSONObject(appUpdatorJsonString);
                System.out.println("YOUTUBE VIDEO FEED JSON OBJECT :"+updaterAppJsonObject);
    
    
    
    
                processYoutubeVideoFEEJSONObject(updaterAppJsonObject);
    
    
    
            }catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            }
        }
    
    
        public void processYoutubeVideoFEEJSONObject(JSONObject updaterAppJsonObject){
            JSONObject dataJSONObject = null;
            JSONArray itemsJSONArray = null;
            JSONObject itemsJSONObject = null;
            JSONObject linkJSONObject = null;
            String yvURL = "";
            YTBVideo yVideo = null;
    
            try{
    
                dataJSONObject = updaterAppJsonObject.getJSONObject("data");
                itemsJSONArray = dataJSONObject.getJSONArray("items");
                for(int i = 0; i < itemsJSONArray.length(); i++){
                    yVideo = new YTBVideo();
                    // for(int i = 0; i < 1; i++){
                    itemsJSONObject = itemsJSONArray.getJSONObject(i);
                    yVideo.setId(itemsJSONObject.getString("id"));
                    yVideo.setThumbNailURL(itemsJSONObject.getJSONObject("thumbnail").getString("sqDefault"));
                    yVideo.setVideoImageURL(itemsJSONObject.getJSONObject("player").getString("default"));
                    yVideo.setTitle(itemsJSONObject.getString("title"));
                    yvURL = itemsJSONObject.getJSONObject("player").getString("default");
    
    
                    String videoURL = yvURL.substring(0,yvURL.indexOf("&"));
                    vdoURL = videoURL;
                    System.out.println("Youtube URL is ::"+videoURL);
                    System.out.println("videoURL ::"+videoURL);
                    yVideo.setThumbnailImage(preloadBitmap(yVideo));
                    videos.add(yVideo);
    
                }
    
            }catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            }
        }
    
    
    
        private Bitmap preloadBitmap(YTBVideo  yTBVideo) throws MalformedURLException,IOException {
            Bitmap photoBitmap= null;
            try{
    
            BitmapFactory.Options  imageOptions = null;
            imageOptions = new BitmapFactory.Options();
            imageOptions.outHeight = 250;
            imageOptions.outHeight = 150;
            String FlickrPhotoPath = yTBVideo.getThumbNailURL();
    
    
            URL FlickrPhotoUrl = null;
    
    
            System.out.println("FlickrPhotoPath:::::::"+FlickrPhotoPath);
            //try {
            FlickrPhotoUrl = new URL(FlickrPhotoPath);
    
            HttpURLConnection httpConnection = (HttpURLConnection) FlickrPhotoUrl.openConnection();
            httpConnection.setDoInput(true);
            httpConnection.connect();
            InputStream inputStream = httpConnection.getInputStream();
            //photoBitmap = BitmapFactory.decodeStream(inputStream);
            photoBitmap = BitmapFactory.decodeStream(inputStream,null,imageOptions);
            System.out.println("photoBitmap:::::::"+photoBitmap);
            /*} catch (MalformedURLException e) {
                    //e.printStackTrace();
                } catch (IOException e) {
                    //e.printStackTrace();
                }*/
            }catch (Exception e) {
                // TODO: handle exception
                //showErrorMessage("communication error", "Unable to connect to Flickr Server");
                e.printStackTrace();
            }
            return photoBitmap;
        }
    
        protected void showErrorMessage(String messageLine1, String message)
        {       
            noDataAlert = Utiliy.getAlertMessage(getBaseContext(), this, messageLine1.toUpperCase()+":\n"+message, 1);
            noDataAlert.getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
            noDataAlert.setCanceledOnTouchOutside(true);
            noDataAlert.setCancelable(true);
            Button yesButton = (Button)noDataAlert.findViewById(R.id.alert_popup_yes_button);
            yesButton.setText("  OK  ");
            yesButton.setTextSize(24);
            yesButton.setPadding(5, 5, 5, 5);
            yesButton.setVisibility(View.VISIBLE);
            yesButton.setOnClickListener(new OnClickListener(){
                public void onClick(View view){
                    noDataAlert.dismiss();
                    finish();
                }
            });
            noDataAlert.show();
        }
    }
    

     package com.test.utubevdo;
    
        import java.util.List;
    
        import com.keyes.youtube.OpenYouTubePlayerActivity;
    
        import android.app.Activity;
        import android.content.Intent;
        import android.content.pm.PackageManager;
        import android.content.pm.ResolveInfo;
        import android.net.Uri;
        import android.os.Bundle;
    
        public class DisplayYoutubeVideo extends Activity {
    
        String vdoID = "";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            vdoID = (String) getIntent().getExtras().get("VIDEO_ID");
    
            System.out.println("vdoID   :::"+vdoID);
        }
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            startVideo(vdoID);
        }
    
    
        private void startVideo ( String videoID ) { // default youtube app
            Intent i = new Intent ( Intent . ACTION_VIEW , Uri . parse ( "vnd.youtube:" + videoID )); 
            List < ResolveInfo > list = getPackageManager (). queryIntentActivities ( i , PackageManager . MATCH_DEFAULT_ONLY ); 
            if ( list . size () == 0 ) {
                //write you own activity to display the video, if default youtube video display class is not available or else use the default class it self
                }
    
            System.out.println("Intent Actin :"+i.getAction());
            startActivity ( i );
        }
    }
    

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.test.utubevdo"
          android:versionCode="1"
          android:versionName="1.0">
    
            <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    
    
        <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>
    
    
        <application android:icon="@drawable/icon" android:label="@string/app_name">
    
      <activity android:name="com.test.utubevdo.AndroidThumbnailList"
                      android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
      <activity android:name="com.test.utubevdo.DisplayYoutubeVideo"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="com.test.utubevdo.VIEW_VIDEO" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest> 
    
    0 讨论(0)
提交回复
热议问题