1

私は、多数の製品カテゴリがあり、各製品カテゴリに 1 つのビデオが含まれるプロジェクトを行っています。Web サービスから URL を取得して動画を再生しています。そのビデオを初めて再生するとき、そのビデオをそのURLから1回だけダウンロードする必要があります。また、インターネット接続がない場合は、ダウンロードした場所 (SD カード) から再生する必要があります。3 つの製品すべてについて 3 つのビデオをダウンロードしたとします。インターネットがない場合、つまり SD カードからそれらのビデオを再生する必要があります。ここで問題になるのは、各製品の特定のビデオ パスを取得する方法です。ギャラリーを開く必要はありません。その製品のビデオを直接再生する必要があります。ビデオのダウンロードを複数回制限する方法。ビデオを再生するための私のコードは

    private void playVideo(String path) {

    dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar);
    dialog.setContentView(R.layout.layout_video_popup);

    ImageView imgViewClose = (ImageView)dialog.findViewById(R.id.imgViewClose);
    imgViewClose.setOnClickListener(this);

    btnPlayPause = (Button) dialog.findViewById(R.id.button1);
    btnPlayPause.setOnClickListener(this);

    seekBar = (SeekBar) dialog.findViewById(R.id.seekBar1);
    seekBar.setOnClickListener(this);
    linearlayout = (LinearLayout) dialog.findViewById(R.id.linerlayout_bottom);
    mVideoView = (VideoView)dialog.findViewById(R.id.videoView);
    mVideoView.setOnTouchListener(this);
    mVideoView.setOnPreparedListener(this);
    mVideoView.setOnCompletionListener(this);
    dialog.show();

    playVideo(path, mVideoView);
    AppLog.d("Video", "playVideo()", path);


}

private void playVideo(String path, VideoView mVideoView) {
    if(path == null || path.isEmpty()) {
        return;
    }

    try {
        pDialpg = ProgressDialog.show(this, "Video", "Please wait..", false, true);
        mVideoView.setVideoPath(path);
        mVideoView.requestFocus();
        RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);  
        relativeParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
        relativeParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
        mVideoView.setLayoutParams(relativeParams);
        mVideoView.invalidate();
    } catch (Exception e) {
        // TODO: handle exception
    }
4

1 に答える 1

0

これは、あなたがそれを行う方法のほんの一例です...

接続があるかどうかを確認できます:

public Boolean checkConnectivity(Context context) {

    Log.d(TAG, "Checking connectivity");
    try {
        connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        wifiInfo = connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        mobileInfo = connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifiInfo.isConnected() || mobileInfo.isConnected()) {
            Log.d(TAG, "Wifi/mobile Connection found");
            return true;
        }
    } catch (Exception e) {
        Log.w(TAG, "PROBLEM " + e);
    }
    Log.d(TAG, "No connection found - working offline");
    return false;
}

初めて、接続がない場合は、デフォルトの警告を設定できます。たとえば、「インターネットに接続していないとビデオを再生できません」などです。

コンがあれば。次のようにストリーミングを再生できます。

    public Void playVideoStream(Context context,
        String url, final VideoView videoView) {

    Log.d(TAG, "Playing video stream");

    MediaController mediaController = new MediaController(context);
    mediaController.setAnchorView(videoView);

    Uri video = Uri.parse(url);
    videoView.setMediaController(mediaController);
    videoView.setVideoURI(video);

    videoView.setOnPreparedListener(new OnPreparedListener() {

        public void onPrepared(MediaPlayer mp) {
            videoView.start();
        }
    });

    return null;
}

すでにダウンロードしている場合:

    public Void playVideoOffline(Context context,
        String filePath, VideoView videoView) {

    Log.d(TAG, "Playing video offline");

    videoView.setVideoPath(filePath);

    MediaController mediaController = new MediaController(context);
    mediaController.setMediaPlayer(videoView);

    videoView.setMediaController(mediaController);
    videoView.requestFocus();

    videoView.start();

    return null;
}

これは実行できる 1 つの方法であり、必ずしも最適な方法ではありません。

于 2013-04-11T13:33:54.767 に答える