⑴ android 打開sd卡文件夾,並獲得選中文件的路徑怎麼實現
一個圖片上傳功能需要提供上傳圖片在SD卡中的路徑,總結了網上的一些列子,修改了一下,代碼很簡單,感興趣的朋友可以參考下哈,希望對大家有所幫助 最近在做一個圖片上傳的功能,需要提供上傳圖片在SD卡中的路徑,在網上看了些例子,改改調試成功,代碼很簡單。其布局文件如下: 復制代碼 代碼如下: <?xml version="1/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/select" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="請選擇SD卡中的圖片" /> </LinearLayout> java文件如下: 復制代碼 代碼如下: package com.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; public class QueryPictureUrlActivity extends Activity { private Button select; private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); select = (Button)findViewById(R.id.select); select.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); } }); } protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (resultCode != RESULT_OK) { //此處的 RESULT_OK 是系統自定義得一個常量 // Log.e(TAG,"ActivityResult resultCode error"); return; } Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try { Uri originalUri = data.getData(); //獲得圖片的uri bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); //顯得到bitmap圖片 // 這里開始的第二部分,獲取圖片的路徑: String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery(originalUri, proj, null, null, null); //按我個人理解 這個是獲得用戶選擇的圖片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); //最後根據索引值獲取圖片路徑 String path = cursor.getString(column_index); Log.e("Lostinai",path); }catch (IOException e) { Log.e("Lostinai",e.toString()); } } } } 最後別忘記了加上許可權啊 復制代碼 代碼如下: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
⑵ android 如何使用Intent跳轉到文件管理器指定目錄。不要再復制
intent
intent
=
new
intent();
intent.setaction("action");//這個地方action換成你要跳轉到的文件管理器的action
intent.addcategory("category");//這個地方category換成你要跳轉到的文件管理器的category
startactivity(intent);
android跳轉到另一個應用都是一樣的,只是設置的action與category跟據跳轉的應用不同有所不同。
⑶ android開發 怎麼實現點擊按鈕打開文件瀏覽器並自動定位到指定文件夾
文件瀏覽器就是常見的文件管理app對吧?嘩枝態關鍵不在定位path,我認為(特別強亂源調,我認為),解決方案,
1,擁有文件管理app源碼,修改或者了解是否 支持其他應用的參照啟動方式,就是非launcher啟動時,是否搭讓能處理path或uri參數。
2,在你的app中附加,文件瀏覽(功能)。
⑷ android的項目里怎麼規定文件路徑的
方法一:把目標文件放入resources文件中,以通過讀取R的資源文件來獲取,具體方式如下:
1、在res下新建raw文件,將帶讀取文件添加到raw文件目錄下。
2、添加如下代碼:
// 如果要使用文件名獲取文件數據:首先獲取資源id然後再通過id獲取輸入流
InputStream im = getResources().openRawResource(R.raw.h_data11);
BufferedReader read = new BufferedReader(new InputStreamReader(im));
String line = "";
StringBuilder sb = new StringBuilder();
try {
while((line = read.readLine()) != null) {
sb.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(read != null) {
try {
read.close();
read = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if(im != null) {
try {
im.close();
im = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
Log.v("", "result = " + sb.toString());
方法二:使用assets 只讀文件進行讀取。
1、將文件到assets下,可以新建文件夾如:「www」然後將文件放入www文件夾中,讀取的path為:"www/filename"
String result = "";
ObjectInputStream ois = null;
AssetManager am = context.getResources().getAssets();
try {
ois = new ObjectInputStream(am.open("www/filename"));
result = (String) ois.readObject();
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (ois != null) {
ois.close();
ois = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
以對象的方式讀取文件中的數據,如果沒有新建文件夾,把前面的「www/」去掉就ok啦
以上方式我都還有疑問的地方:
1、raw下新建多級目錄是否真的不能夠使用。
⑸ android怎麼調用系統自帶的圖庫打開指定目錄的相冊
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//完成照相後回調用此方法
super.onActivityResult(requestCode, resultCode, data);
case 1:
switch (resultCode) {
case Activity.RESULT_OK://照相完成點擊確定
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 檢測sd是否可用
Log.v("TestFile", "SD card is not avaiable/writeable right now.");
return; }
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 獲取相機返回的數據,並轉換為Bitmap圖片格式
FileOutputStream b = null;
File file = new File("/sdcard/pk4fun/");
file.mkdirs();// 創建文件夾,名稱為pk4fun // 照片的命名,目標文件夾下,以當前時間數字串為名稱,即可確保每張照片名稱不相同。網上流傳的其他Demo這里的照片名稱都寫死了,則會發生無論拍照多少張,後一張總會把前一張照片覆蓋。細心的同學還可以設置這個字元串,比如加上「IMG」字樣等;然後就會發現sd卡中myimage這個文件夾下,會保存剛剛調用相機拍出來的照片,照片名稱不會重復。
String str = null;
Date date = null;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");// 獲取當前時間,進一步轉化為字元串
date = new Date(resultCode);
str = format.format(date);
String fileName = "/sdcard/myImage/" + str + ".jpg";
sendBroadcast(fileName);
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把數據寫入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
} break;
case Activity.RESULT_CANCELED:// 取消
break;
}
break;
case 2:
switch (resultCode) {
case Activity.RESULT_OK: {
Uri uri = data.getData();
Cursor cursor = mActivity.getContentResolver().query(uri, null,
null, null, null);
cursor.moveToFirst();
String imgNo = cursor.getString(0); // 圖片編號
String imgPath = cursor.getString(1); // 圖片文件路徑
String imgSize = cursor.getString(2); // 圖片大小
String imgName = cursor.getString(3); // 圖片文件名
cursor.close();
// Options options = new BitmapFactory.Options();
// options.inJustDecodeBounds = false;
// options.inSampleSize = 10;
// Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options);
}
break;
case Activity.RESULT_CANCELED:// 取消
break;
}
break;
}