這篇文章主要介紹Android如何選擇圖片或視頻進行循環(huán)播放,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
果洛州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
項目要求對本地圖片或者視頻進行輪播,功能實現(xiàn)完成后發(fā)現(xiàn)只是在模擬器上運行ok,后來發(fā)現(xiàn)是文件路徑的原因。
文件uri的頭部有兩種一種是以file開頭一種是以content開頭要進行判斷轉(zhuǎn)化
實現(xiàn)如下:
視頻 點擊吊起文件查看:
private void setVideoPath() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*");//設(shè)置類型,我這里是任意類型,任意后綴的可以這樣寫。 intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent, VIDEO_PATH); }
在返回中取得選中文件路徑
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) return; switch (requestCode) { case VIDEO_PATH: Uri uri = data.getData(); String path = getPath( uri); showToastReal("你選中的視頻路徑:" + path); SpUtils.getInstace(this).saveString("videoPath", path); break; case PIC_PATH: Uri picUri = data.getData(); String picPath = getPath(picUri); showToastReal("你選中的圖片路徑:" + picPath); SpUtils.getInstace(this).saveString("picPath", picPath); break; } }
public String getPath(Uri uri) { String path; if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方應(yīng)用打開 path = uri.getPath(); return path; } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后 path = getPath(this, uri); } else {//4.4以下下系統(tǒng)調(diào)用方法 path = getRealPathFromURI(uri); } return path; } @SuppressLint("NewApi") public String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } // DownloadsProvider else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } // MediaProvider else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } final String selection = "_id=?"; final String[] selectionArgs = new String[]{split[1]}; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content".equalsIgnoreCase(uri.getScheme())) { return getDataColumn(context, uri, null, null); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } /** * Get the value of the data column for this Uri. This is useful for * MediaStore Uris, and other file-based ContentProviders. * * @param context The context. * @param uri The Uri to query. * @param selection (Optional) Filter used in the query. * @param selectionArgs (Optional) Selection arguments used in the query. * @return The value of the _data column, which is typically a file path. */ public String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = "_data"; final String[] projection = {column}; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int column_index = cursor.getColumnIndexOrThrow(column); return cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } return null; } /** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */ public boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */ public boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */ public boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); }
實現(xiàn)視頻輪播
public class VideoActivity extends BaseActivity { @Bind(R.id.sv_ad) SurfaceView vv; @Bind(R.id.id_ig_back) ImageView idIgBack; private MediaPlayer mPlayer; private String path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_video); ButterKnife.bind(this); verifyStoragePermissions(this); init(); // init2(); } private void init2() { String path = SpUtils.getInstace(VideoActivity.this).getString("videoPath"); Uri uri = Uri.parse("file://" + path); try { MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(getApplicationContext(), uri); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } private void init() { idIgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); vv.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mPlayer != null) { mPlayer.stop(); mPlayer.release(); mPlayer = null; } } @Override public void surfaceCreated(SurfaceHolder holder) { path = SpUtils.getInstace(VideoActivity.this).getString("videoPath"); try { if (mPlayer == null) { mPlayer = MediaPlayer.create(VideoActivity.this, Uri.parse("file://" + path)); } if(mPlayer==null){ showToastReal("請在個人中心中選擇正確的視頻"); } mPlayer.setDisplay(holder);//將SurfaceHolder關(guān)聯(lián)mediaplayer mPlayer.setLooping(true); mPlayer.start(); mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { // TODO Auto-generated method stub return false; } }); } catch (Exception e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } public void onBack(View view) { finish(); } @Override public void loadNetData() { } private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; /** * 檢查應(yīng)用程序是否允許寫入存儲設(shè)備 **
*
* 如果應(yīng)用程序不允許那么會提示用戶授予權(quán)限 * * @param activity */ public static void verifyStoragePermissions(Activity activity) { // Check if we have write permission int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions( activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); } } }
layout的實現(xiàn)
以上是“Android如何選擇圖片或視頻進行循環(huán)播放”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!