程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 視頻-Android學習surfaceView遇到問題。可能很簡單,希望有人指點迷津

視頻-Android學習surfaceView遇到問題。可能很簡單,希望有人指點迷津

編輯:編程解疑
Android學習surfaceView遇到問題。可能很簡單,希望有人指點迷津

我這幾天用surfaceView來做視頻播放的時候,file文件讀取是沒有問題的,但是在之後setDataSource()和.prepare()這兩個方法的其中一個(抱歉,我實在不能確定問題到底出在這兩個中的哪一個)拋出了IO異常。具體代碼如下,我都做注釋

package com.example.zyc.surfaceview;

import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Surface;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private File file;
private Button playButton;
private Button pauseButton;
private Button stopButton;
private boolean isPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    //實現各種控件
    mediaPlayer = new MediaPlayer();
    surfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
    playButton = (Button)findViewById(R.id.play);
    pauseButton = (Button)findViewById(R.id.pause);
    stopButton = (Button)findViewById(R.id.stop);

    //初始化一些變量
    isPlay = false;
    file = new File(Environment.getExternalStorageDirectory().getPath()+"/ss.mp4");
    pauseButton.setEnabled(false);

    //用來檢查file是否讀取正確
    if(file.exists()){
        Toast.makeText(MainActivity.this,"文件已經被獲取 文件長度為"+file.length(),Toast.LENGTH_LONG).show();
    }else{
        Toast.makeText(MainActivity.this,"文件沒有獲得",Toast.LENGTH_LONG).show();
    }

    //實現三個按鈕的方法
    playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mediaPlayer.reset(); //重置MediaPlay對象

            try {
                mediaPlayer.setDataSource(file.getAbsolutePath());  //讀取視頻文件地址
                mediaPlayer.prepare();                              //預加載視頻
                mediaPlayer.setDisplay(surfaceView.getHolder());  //將視頻畫面輸出到surface上
                mediaPlayer.start();                                //開始播放
                pauseButton.setText("暫停");                        //pause此時為暫停
                pauseButton.setEnabled(true);                       //pause按鈕此時可用
                isPlay = true;
            }catch (IOException e){
                Toast.makeText(MainActivity.this,"發生錯誤",Toast.LENGTH_LONG).show();
            }

        }
    });

    pauseButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isPlay == true) {
                pauseButton.setText("繼續");
                mediaPlayer.pause();
                isPlay = false;
            } else {
                mediaPlayer.start();
                pauseButton.setText("暫停");
                isPlay = true;
            }
        }
    });

    stopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isPlay==true){
                mediaPlayer.stop();
                Toast.makeText(MainActivity.this,"已停止",Toast.LENGTH_LONG).show();
                pauseButton.setEnabled(false);
            }
        }
    });
}

}
用的android studio,三星真機模擬
運行後的截圖,(我還沒點播放)
圖片說明
可以看到,文件長度。說明file的沒有問題的

但是點擊播放以後
圖片說明

實在是不明白這怎麼能錯,其他人貌似也沒有我這毛病啊

最佳回答:


這個問題已經 解決了 問題在於AndroidMainfest.xml文件中我沒有設置應用讀取本地文件的權限
加在application標簽後面即可

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved