1

項目名の配列から取り込まれたリスト ビューがあります。List(クラス)とlist_item(レイアウト)で設定します。ここで、ClipsActivity (クラス) activity_clips(layout) で設定された VideoView でビデオを再生するために、リストビュー行のクリック リスナーを設定します。

問題: ListView の行をクリックすると、次のアクティビティ (ClipsActivity) がロードされ、「申し訳ありませんが、このビデオは再生できません」という警告が表示されます。確かにアセットフォルダーにビデオファイルがあります。私は信じています-問題は、文字列が ClickListener から videoview に渡される/解析される方法にある可能性があります。誰かがこれについて私を助けてくれることを願っています。

List クラスを使用するコード

package com.abcdef.list;



//import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
//import android.widget.AdapterView;
//import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
 import android.widget.ListView;
    //import android.widget.TextView;

   public class List extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// storing string resources into Array
String[] clips_files = getResources().getStringArray(R.array.clips_files);

// Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, clips_files));
  }   
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
change(position);
  }
void change(int position){
Intent intent = new Intent(getApplicationContext(), ClipsActivity.class);
    switch(position){  

    case 0 :
       intent.setData(Uri.parse("file:///android_asset/A1.mp4"));
        break;
    case 1 :
       intent.setData(Uri.parse("file:///android_asset/A2.mp4"));
        break;
    case 2 :
       intent.setData(Uri.parse("file:///android_asset/A3.mp4"));
        break;

    case 3 :
      intent.setData(Uri.parse("file:///android_asset/A4.mp4"));
        break;
    }
        startActivity(intent);
    }  
}

これは、VideoView で ClipsActivity クラスを使用するコードです。

パッケージcom.abcde.list;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
import java.net.URI; 


@SuppressWarnings("unused")

public class ClipsActivity extends Activity  {

VideoView mVideoView;
MediaController mc;
// String uriPath;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_clips);
    final VideoView mVideoView = (VideoView)findViewById(R.id.videoview);
     MediaController mc = new MediaController(this);
     mc.setAnchorView(mVideoView);
     mVideoView.setMediaController(mc);


    mVideoView.setVideoPath((getIntent().getDataString()); 
    mVideoView.start(); 
    mVideoView.setOnCompletionListener(
            new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                mVideoView.start();



             }
            });

}



}
4

1 に答える 1

0

アセットからアクセスする代わりに、ビデオをプロジェクトの res/raw フォルダーにコピーする必要があります。res フォルダーの下に raw フォルダーを作成します。サポートされている形式 (3gp、wmv、mp4) で、ビデオファイル.mp4 のように、ファイル名に小文字、数字、アンダースコア、およびドットを使用して名前を付ける必要があります。

VideoView view = (VideoView)findViewById(R.id.videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
view.setVideoURI(Uri.parse(path));
view.start();
于 2013-01-13T20:32:17.953 に答える