2017-03-27 17 views
-1

私は私がしたいことは(Button) findViewById(R.id.pickVid);をクリックしたときに、それはビデオを選択したときに、新しい活動がすべき、PICK_VIDEO_REQUESTを呼び出すで、以前のplay video in new activityアンドロイド - MediaPlayerの(失敗開く:ENOENT(そのようなファイルやディレクトリはありませんが)

質問を。私を助けオープンし、ビデオを再生

男は、私がFileInputStream

、問題の代わりにthis.mPlayer.setDataSource(mStringFilePath);を使用する必要があることを言った:

setDataSource failed.: status=0x80000000に黒い画面が表示されるというエラーが表示されます。

MainActivity

public class MainActivity extends AppCompatActivity { 

Uri mMediaUri; 
String vidFile; 

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

    Button pickVid = (Button) findViewById(R.id.pickVid); 

    //choose the video 
    pickVid.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent chooseVideo = new Intent(Intent.ACTION_GET_CONTENT); 
      chooseVideo.setType("video/*"); 
      startActivityForResult(chooseVideo, PICK_VIDEO_REQUEST); 


     } 
    }); 


} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PICK_VIDEO_REQUEST) { 
     if (resultCode == RESULT_OK) { 
      mMediaUri = data.getData(); 
      vidFile = mMediaUri.toString(); 
      Intent playVid = new Intent(MainActivity.this, PlayVideoAct.class); 
      playVid.putExtra("vidFile", vidFile); 


      startActivity(playVid); 
     } 
    } 

} 

PlayVideoAct

String mStringFilePath; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_playvideo); 

    mStringFilePath = getIntent().getStringExtra("vidFile"); 

    } 

    public void surfaceCreated(SurfaceHolder holder) { 

    if (this.mPlayer == null) { 
     this.mPlayer = new MediaPlayer(); 
    } else { 
     this.mPlayer.reset(); 
     mPlayer.start(); 
    } 
    try { 
     this.mMediaPlayer.setDataSource(mStringFilePath); 
     this.mPlayer.setDisplay(this.mSurfaceHolder); 
     this.mPlayer.prepare(); 
     this.mPlayer.start(); 
     this.mPlayer.pause(); 
     Play(); 

    } catch (Exception e) { 
     LogUtil.e(e, "Error in PlayVideoAct.surfaceCreate(SurfaceHolder)"); 
    } 
} 

private void Play() { 

mMediaPlayer.start(); 
if (this.mMediaPlayer.isPlaying()) { 
    this.mMediaPlayer.pause(); 
    return; 
} 
if (this.isStop) { 
    this.mMediaPlayer.seekTo(this.leftPosition); 
} 
this.mImageViewButtonControls.setImageResource(R.drawable.pause); 

}

+0

* 'void MediaPlayer.setDataSource(String path)' - 使用するデータソース(ファイルパスまたはhttp/rtsp URL)を設定します。* ... **なぜ 'Intent.ACTION_GET_CONTENT'がhttp/rtspまたはファイルパス?** – Selvin

+0

@Selvin does not?私は 'mStringFilePath'をトーストし、' content:// media/external/video/media/28638'を返しました。 – Brooks

答えて

0

チェックビデ​​オパス、それが正しいかどうあなたのようなすべての必要な権限があれば、その後、チェック:

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

た場合をはい、あなたのAndroidのバージョンによっては、設定 - >アプリケーション - >アプリケーション - >権限に移動し、これらの権限を手動で切り替える必要があるかもしれません。

+0

私は既にアクセス許可を追加しました – Brooks

+0

そのような場合は、パスで文字列をハードコーディングしてください。例えば。 /sdcard/yourFile.mp4に設定してください – LLL

関連する問題