先调用:
intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); //设置类型,我这里是任意类型,任意后缀的可以这样写。 intent.addCategory(Intent.CATEGORY_OPENABLE); // 只有设置了这个,返回的uri才能使用 getContentResolver().openInputStream(uri) 打开。 startActivityForResult(intent, 1);
再在 onActivityResult 里做对uri相应的操作(目前只能读操作)
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == Activity.RESULT_OK && data != null) { try { readBytes(data.getData()); } catch (IOException e) { e.printStackTrace(); } } } public byte[] readBytes(Uri inUri) throws IOException { InputStream inputStream = getContentResolver().openInputStream(inUri); // this dynamically extends to take the bytes you read ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); // this is storage overwritten on each iteration with bytes int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; // we need to know how may bytes were read to write them to the byteBuffer int len = 0; while ((len = inputStream.read(buffer)) != -1) { byteBuffer.write(buffer, 0, len); Log.i("welhzh_f", "" + len); } // and then we can return your byte array. return byteBuffer.toByteArray(); }