ネット上のソース(動画、画像、サウンド)を取ってきて、Androidで表示・再生などしてみます。

動画の場合はストリーミングではなく、プログレッシブ・ダウンロードでやってみます。

画像の場合は、ライブラリを使う場合と使わないシンプルなパターンの2つをやってみます。




動画をプログレッシブ・ダウンロード

動画の再生には、MediaPlayerではなくVideoViewを使ってみます(実体はMediaPlayerだそうですが)。

VideoViewの方が実装が簡単です。

VideoViewがサポートするメディアフォーマットはそんなに多くないです。

ビデオの動画はmp4か3gpを使います(スマホで撮った動画が使えます)。



【MainActivity.java】

import android.widget.VideoView;
import android.net.Uri;
import android.view.View;
import android.media.MediaPlayer;



VideoView videoView;
String video_name = "http://example.com/sample.mp4";



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

    videoView = (VideoView)findViewById(R.id.videoView);
    videoView.setVisibility(View.GONE);

    //video再生開始のリスナー
    videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            //ToDo
        }
    });

    //video再生完了のリスナー
    videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
        @Override
        public void onCompletion(MediaPlayer mp) {
            //リピートする場合
            // 先頭に戻す
            videoView.seekTo(0);
            // 再生開始
            videoView.start();
        }
    });
        
}


@Override
public void onDestroy() {
    
    videoView.suspend();
    
    super.onDestroy();
}


private void play_video(){
    videoView.setVisibility(View.VISIBLE);
    videoView.setVideoURI(Uri.parse(video_name));
    videoView.start();
    
}

private void stop_video(){
    videoView.setVisibility(View.GONE);
        videoView.stopPlayback();
}


【AndroidManifest.xml】

<uses-permission android:name="android.permission.INTERNET" />


【activity_main.xml】

<VideoView android:id="@+id/videoView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
</VideoView>







VideoViewでYouTube動画を再生する場合

通常のURLでは再生できません。

再生させるには、対象動画のRTSP(Real Time Streaming Protocol)を取得する必要があります。

以下のフィールドにYouTube動画のURLを入力してボタンをクリックしてみてください。

URLのフォーマットのレギュレーションが変更されていなければRTSPを表示します。

【YouTube動画のURL】(例:http://www.youtube.com/watch?v=cpDAtw49t4k)
    

【RTSP】


まあ、こんなことしなくても普通にWebViewやYouTube Player API for Androidを使えっちゅう話もありますが.....。






画像をダウンロード表示して、キャッシュを使って再表示

ここのライブラリを使ってみました。

5つのクラスで構成されています、ほぼ修正不要。MITライセンスなので、自由は利きます。

アニメーションGIFにはまだ対応していないようです。

以下のコードのxxxxxxは、ご自分のパッケージ名で置き換えてください。



【MainActivity.java】

import xxxxxx.ImageCache;
import xxxxxx.R;
import xxxxxx.UrlImageView;
import xxxxxx.UrlImageView.OnImageLoadListener;




UrlImageView mImageView;
String image_name = "http://example.com/photo.jpg";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    mImageView = (UrlImageView)findViewById(R.id.imageView);
        mImageView.setVisibility(View.GONE);
    
}

@Override
public void onDestroy() {
    
    ImageCache.deleteAll(getCacheDir());
    
    super.onDestroy();
}

final private OnImageLoadListener imageLoadListener = new OnImageLoadListener() {
    @Override
    public void onStart(String url) {
        //Toast.makeText(getApplicationContext(), "start", Toast.LENGTH_SHORT).show();
    }
    
    @Override
    public void onComplete(String url) {
        //Toast.makeText(getApplicationContext(), "end", Toast.LENGTH_SHORT).show();
    }
};

private void show_image(){
    mImageView.setVisibility(View.VISIBLE);
        mImageView.setImageUrl(image_name, imageLoadListener);
        
}


【AndroidManifest.xml】

<uses-permission android:name="android.permission.INTERNET" />


【activity_main.xml】

<xxxxxx.UrlImageView
	android:id="@+id/imageView"
    	android:layout_width="fill_parent" 
    	android:layout_height="fill_parent"
    />









画像をダウンロード表示

import android.widget.ImageView;
import java.net.URL;
import java.io.InputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.IOException;




ImageView image1;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    
    image1 = new ImageView(this);
    image1.setVisibility(View.GONE);
    addContentView(image1, new LayoutParams());
}


private void show_image(){
    URL url;
        InputStream istream;

    image1.setVisibility(View.VISIBLE);
    

        try {
            url = new URL("http://example.com/sample.jpg");
            
            istream = url.openStream();
            
            Bitmap bmp = BitmapFactory.decodeStream(istream);
            
            image1.setImageBitmap(bmp);
            
            istream.close();
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    
}


【AndroidManifest.xml】

<uses-permission android:name="android.permission.INTERNET" />







アニメーションGIFをダウンロードして表示

import android.webkit.WebSettings;
import android.webkit.WebViewClient;
import android.webkit.WebView;



private WebView webView = null;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    webView = new WebView(this);
    
    webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                //
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //
            }
        });
        
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
    webView.setVisibility(View.GONE);
    addContentView(webView, new LayoutParams());
}


private void show_animgif(){
    webView.setVisibility(View.VISIBLE);
    webView.loadUrl("http://example.com/anim.gif");
}


【AndroidManifest.xml】

<uses-permission android:name="android.permission.INTERNET" />







サウンドをダウンロードして再生

効果音のような単純で短い音以外は、soundpoolではなくMediaPlayerを使います。

サウンドのフォーマットは、mp3やoggを使用します。



【MainActivity.java】

import android.media.MediaPlayer;
import java.io.IOException;


private MediaPlayer mp;
String sound_name = "http://example.com/sound.mp3";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    mp = new MediaPlayer();

}

@Override
public void onDestroy() {
    if (mp != null){
	    mp.reset();
		mp.release();
		mp = null;
    }
    super.onDestroy();
}

private void play_sound(){
    
    try {
        mp.setDataSource(sound_name);
    } catch (IllegalArgumentException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    } catch (IOException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    }
    
    try {
       // ループ再生の設定
       mp.setLooping(true);
        mp.prepare();
    } catch (IllegalStateException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    } catch (IOException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    }
    
    mp.start();
}

private void stop_sound(){
    mp.stop();
        mp.reset();//違うサウンドを再生する場合
}

private void pause_sound(){
    mp.pause();
}


【AndroidManifest.xml】

<uses-permission android:name="android.permission.INTERNET" />