android 跳转到手机内存中查找文件,并上传音频文件
来源:互联网 发布:淘宝上代写代发论文 编辑:程序博客网 时间:2024/06/13 04:06
跳转到手机内存并查找所有文件
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent, 1);在点击的文件并带回路径的时候,可以判断是否是你想要上传的文件
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { File file; String name; if (resultCode == Activity.RESULT_OK) { Uri uri = data.getData(); if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方应用打开 // Toast.makeText(this, uri.getPath() + "11111", Toast.LENGTH_SHORT).show(); return; } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后 String path = getPath(this, uri); if (!path.contains("mp3")) { Toast.makeText(this, "请上传mp3类文件", Toast.LENGTH_SHORT).show(); return; } // Toast.makeText(this, path.toString(), Toast.LENGTH_SHORT).show(); file = new File("file://" + path); // File absoluteFile = file.getAbsoluteFile(); name = file.getName(); } else {//4.4一下系统调用方法 String realPathFromURI = getRealPathFromURI(uri); file = new File("file://" + realPathFromURI);//上传文件 name = file.getName(); // Toast.makeText(NovelScAudio.this, getRealPathFromURI(uri) + "222222", Toast.LENGTH_SHORT).show(); } Log.i("lg", "lggg==>" + file);//上传文件 Log.i("lg", "lggg==>" + name);//上传文件 if (name != null) { xuanzeaudio.setText(name); } } } public String getRealPathFromURI(Uri contentUri) { String res = null; String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); if (null != cursor && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); res = cursor.getString(column_index); cursor.close(); } return res; }
这个是工具类 util
import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.List;import junit.framework.Assert;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.app.ProgressDialog;import android.content.ContentUris;import android.content.Context;import android.content.DialogInterface;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Build;import android.os.Environment;import android.provider.MediaStore;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;public class Util {private static final String TAG = "SDK_Sample.Util";private static Dialog mProgressDialog;private static Toast mToast; /* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 * @param src byte[] data * @return hex string */ public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * Convert hex string to byte[] * @param hexString the hex string * @return byte[] */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /** * Convert char to byte * @param c char * @return byte */ private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } /* * 16进制数字字符集 */ private static String hexString="0123456789ABCDEF"; /* * 将字符串编码成16进制数字,适用于所有字符(包括中文) */ public static String toHexString(String str) {//根据默认编码获取字节数组 byte[] bytes = null;try {bytes = str.getBytes("UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}if (bytes == null) return null; StringBuilder sb=new StringBuilder(bytes.length*2);//将字节数组中每个字节拆解成2位16进制整数 for(int i=0;i<bytes.length;i++) { sb.append(hexString.charAt((bytes[i]&0xf0)>>4)); sb.append(hexString.charAt((bytes[i]&0x0f)>>0)); } return sb.toString(); } //转换十六进制编码为字符串 public static String hexToString(String s) { if("0x".equals(s.substring(0, 2))) { s =s.substring(2); } byte[] baKeyword = new byte[s.length()/2]; for(int i = 0; i < baKeyword.length; i++) { try { baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16)); } catch(Exception e) { e.printStackTrace(); } } try { s = new String(baKeyword, "utf-8");//UTF-16le:Not } catch (Exception e1) { e1.printStackTrace(); } return s; } public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {ByteArrayOutputStream output = new ByteArrayOutputStream();bmp.compress(CompressFormat.PNG, 100, output);if (needRecycle) {bmp.recycle();}byte[] result = output.toByteArray();try {output.close();} catch (Exception e) {e.printStackTrace();}return result;}public static byte[] getHtmlByteArray(final String url) { URL htmlUrl = null; InputStream inStream = null; try { htmlUrl = new URL(url); URLConnection connection = htmlUrl.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection)connection; int responseCode = httpConnection.getResponseCode(); if(responseCode == HttpURLConnection.HTTP_OK){ inStream = httpConnection.getInputStream(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } byte[] data = inputStreamToByte(inStream);return data;}public static byte[] inputStreamToByte(InputStream is) {try{ByteArrayOutputStream bytestream = new ByteArrayOutputStream();int ch;while ((ch = is.read()) != -1) {bytestream.write(ch);}byte imgdata[] = bytestream.toByteArray();bytestream.close();return imgdata;}catch(Exception e){e.printStackTrace();}return null;}public static byte[] readFromFile(String fileName, int offset, int len) {if (fileName == null) {return null;}File file = new File(fileName);if (!file.exists()) {Log.i(TAG, "readFromFile: file not found");return null;}if (len == -1) {len = (int) file.length();}Log.d(TAG, "readFromFile : offset = " + offset + " len = " + len + " offset + len = " + (offset + len));if(offset <0){Log.e(TAG, "readFromFile invalid offset:" + offset);return null;}if(len <=0 ){Log.e(TAG, "readFromFile invalid len:" + len);return null;}if(offset + len > (int) file.length()){Log.e(TAG, "readFromFile invalid file len:" + file.length());return null;}byte[] b = null;try {RandomAccessFile in = new RandomAccessFile(fileName, "r");b = new byte[len];in.seek(offset);in.readFully(b);in.close();} catch (Exception e) {Log.e(TAG, "readFromFile : errMsg = " + e.getMessage());e.printStackTrace();}return b;} public static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels); int roundedSize; if (initialSize <= 8) { roundedSize = 1; while (roundedSize < initialSize) { roundedSize <<= 1; } } else { roundedSize = (initialSize + 7) / 8 * 8; } return roundedSize; } private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { double w = options.outWidth; double h = options.outHeight; int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels)); int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength)); if (upperBound < lowerBound) { // return the larger one when there is no overlapping zone. return lowerBound; } if ((maxNumOfPixels == -1) && (minSideLength == -1)) { return 1; } else if (minSideLength == -1) { return lowerBound; } else { return upperBound; } } /** * 以最省内存的方式读取图片 */ public static Bitmap readBitmap(final String path){ try{ FileInputStream stream = new FileInputStream(new File(path+"test.jpg")); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 8; opts.inPurgeable=true; opts.inInputShareable=true; Bitmap bitmap = BitmapFactory.decodeStream(stream , null, opts); return bitmap; } catch (OutOfMemoryError e) { return null; } catch (Exception e) { return null; } } private static final int MAX_DECODE_PICTURE_SIZE = 1920 * 1440;public static Bitmap extractThumbNail(final String path, final int height, final int width, final boolean crop) {Assert.assertTrue(path != null && !path.equals("") && height > 0 && width > 0);BitmapFactory.Options options = new BitmapFactory.Options();try {options.inJustDecodeBounds = true;Bitmap tmp = BitmapFactory.decodeFile(path, options);if (tmp != null) {tmp.recycle();tmp = null;}Log.d(TAG, "extractThumbNail: round=" + width + "x" + height + ", crop=" + crop);final double beY = options.outHeight * 1.0 / height;final double beX = options.outWidth * 1.0 / width;Log.d(TAG, "extractThumbNail: extract beX = " + beX + ", beY = " + beY);options.inSampleSize = (int) (crop ? (beY > beX ? beX : beY) : (beY < beX ? beX : beY));if (options.inSampleSize <= 1) {options.inSampleSize = 1;}// NOTE: out of memory errorwhile (options.outHeight * options.outWidth / options.inSampleSize > MAX_DECODE_PICTURE_SIZE) {options.inSampleSize++;}int newHeight = height;int newWidth = width;if (crop) {if (beY > beX) {newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);} else {newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);}} else {if (beY < beX) {newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);} else {newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);}}options.inJustDecodeBounds = false;Log.i(TAG, "bitmap required size=" + newWidth + "x" + newHeight + ", orig=" + options.outWidth + "x" + options.outHeight + ", sample=" + options.inSampleSize);Bitmap bm = BitmapFactory.decodeFile(path, options);if (bm == null) {Log.e(TAG, "bitmap decode failed");return null;}Log.i(TAG, "bitmap decoded size=" + bm.getWidth() + "x" + bm.getHeight());final Bitmap scale = Bitmap.createScaledBitmap(bm, newWidth, newHeight, true);if (scale != null) {bm.recycle();bm = scale;}if (crop) {final Bitmap cropped = Bitmap.createBitmap(bm, (bm.getWidth() - width) >> 1, (bm.getHeight() - height) >> 1, width, height);if (cropped == null) {return bm;}bm.recycle();bm = cropped;Log.i(TAG, "bitmap croped size=" + bm.getWidth() + "x" + bm.getHeight());}return bm;} catch (final OutOfMemoryError e) {Log.e(TAG, "decode bitmap failed: " + e.getMessage());options = null;}return null;}public static final void showResultDialog(Context context, String msg,String title) {if(msg == null) return;String rmsg = msg.replace(",", "\n");Log.d("Util", rmsg);new AlertDialog.Builder(context).setTitle(title).setMessage(rmsg).setNegativeButton("知道了", null).create().show();}public static final void showProgressDialog(Context context, String title,String message) {dismissDialog();if (TextUtils.isEmpty(title)) {title = "请稍候";}if (TextUtils.isEmpty(message)) {message = "正在加载...";}mProgressDialog = ProgressDialog.show(context, title, message);}public static AlertDialog showConfirmCancelDialog(Context context,String title, String message,DialogInterface.OnClickListener posListener) {AlertDialog dlg = new AlertDialog.Builder(context).setMessage(message).setPositiveButton("确认", posListener).setNegativeButton("取消", null).create();dlg.setCanceledOnTouchOutside(false);dlg.show();return dlg;}public static final void dismissDialog() {if (mProgressDialog != null) {mProgressDialog.dismiss();mProgressDialog = null;}}/** * 打印消息并且用Toast显示消息 * * @param activity * @param message * @param logLevel * 填d, w, e分别代表debug, warn, error; 默认是debug */public static final void toastMessage(final Activity activity,final String message, String logLevel) {if ("w".equals(logLevel)) {Log.w("sdkDemo", message);} else if ("e".equals(logLevel)) {Log.e("sdkDemo", message);} else {Log.d("sdkDemo", message);}activity.runOnUiThread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubif (mToast != null) {mToast.cancel();mToast = null;}mToast = Toast.makeText(activity, message, Toast.LENGTH_SHORT);mToast.show();}});}/** * 打印消息并且用Toast显示消息 * * @param activity * @param message * @param logLevel * 填d, w, e分别代表debug, warn, error; 默认是debug */public static final void toastMessage(final Activity activity,final String message) {toastMessage(activity, message, null);}/** * 根据一个网络连接(String)获取bitmap图像 * * @param imageUri * @return * @throws MalformedURLException */public static Bitmap getbitmap(String imageUri) {Log.v(TAG, "getbitmap:" + imageUri);// 显示网络上的图片Bitmap bitmap = null;try {URL myFileUrl = new URL(imageUri);HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();conn.setDoInput(true);conn.connect();InputStream is = conn.getInputStream();bitmap = BitmapFactory.decodeStream(is);is.close();Log.v(TAG, "image download finished." + imageUri); } catch (OutOfMemoryError e) { e.printStackTrace(); bitmap = null;} catch (IOException e) {e.printStackTrace();Log.v(TAG, "getbitmap bmp fail---"); bitmap = null;}return bitmap;}public static void release() { mProgressDialog = null; mToast = null;} // ========= // =通过URI获取本地图片的path // =兼容android 5.0 // ========== public static String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; public static int Build_VERSION_KITKAT = 19; public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= 19; // DocumentProvider if (isKitKat && isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = 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 = 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 = 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 the remote address if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); return getDataColumn(context, uri, null, null); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } private static final String PATH_DOCUMENT = "document"; /** * Test if the given URI represents a {@link Document} backed by a * {@link DocumentsProvider}. */ private static boolean isDocumentUri(Context context, Uri uri) { final List<String> paths = uri.getPathSegments(); if (paths.size() < 2) { return false; } if (!PATH_DOCUMENT.equals(paths.get(0))) { return false; } return true; } private static String getDocumentId(Uri documentUri) { final List<String> paths = documentUri.getPathSegments(); if (paths.size() < 2) { throw new IllegalArgumentException("Not a document: " + documentUri); } if (!PATH_DOCUMENT.equals(paths.get(0))) { throw new IllegalArgumentException("Not a document: " + documentUri); } return paths.get(1); } /** * 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. * [url=home.php?mod=space&uid=7300]@return[/url] The value of * the _data column, which is typically a file path. */ public static 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 index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } } finally { if (cursor != null) cursor.close(); } return null; } /** * @param uri * The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */ public static 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 static 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 static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } /** * @param uri * The Uri to check. * @return Whether the Uri authority is Google Photos. */ public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); }}
阅读全文
0 0
- android 跳转到手机内存中查找文件,并上传音频文件
- Android中byte数组生成文件并保存到手机
- 检测手机中是否安装了google地图,没有则提示安装,并跳转到地图查找特定的地点
- Android中跳转到手机通讯录并返回电话和姓名
- android点击按钮跳转到内存并获取选取的文件路径
- android手机客户端上传文件,java servlet服务器端接收并保存到服务器
- android手机客户端上传文件,java servlet服务器端接收并保存到服务器
- android手机客户端上传文件,java servlet服务器端接收并保存到服务器
- android保存文件到手机内存
- android 扫描手机内存和SD卡,获取手机的视频、音频文件。把获取不到的文件扫描出来
- Android手机截屏并上传到电脑
- android studio 导入音频文件到模拟器中
- 音频文件的上传和合并
- Android中根据byte数组生成文件并保存到手机
- Android中根据byte数组生成文件并保存到手机
- android客户端把SD卡文件上传到服务器端并保存在PC硬盘文件夹中
- adb上传文件到模拟器或手机中
- Android 从网页中跳转到APP并传递数据
- 判断app一个APP页面是原生的还是H5页面
- pat说反话(java)
- Ubuntu 14.04 下读取CPU温度
- Carthage管理依赖库
- 详解spring 每个jar的作用
- android 跳转到手机内存中查找文件,并上传音频文件
- 获取android软键盘高度
- LeetCode 57 Insert Interval
- 安装chromedriver
- maven构建java web项目总结
- String、StringBuffer和StringBuilder类
- Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
- listview中网络请求图片 用Imageloader加载闪烁问题
- X86 PUSH指令详解