android中选择文件,部分手机找不到文件路径问题的解决

  • Post author:
  • Post category:其他


原文地址:   http://write.blog.csdn.net/postedit

直接上代码,注释已经很清楚


/**


* Get a file path from a

Uri

. This will get the the path for Storage Access


* Framework Documents, as well as the _data field for the MediaStore and


* other file





based ContentProviders.


*


*



@param



context The context.


*



@param



uri The

Uri

to query.


*



@author




paulburke


*/


@SuppressLint

(

“NewApi”

)



public




static


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];

}


//



TODO



handle non-primary volumes

}


// 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




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


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




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());

}

————–

spring mvc+tomcat源码分析视频 (复制链接在浏览器打开)


https://study.163.com/course/courseMain.htm?share=2&shareId=480000001919582&courseId=1209399899&_trace_c_p_k2_=6d81bc445e9c462ab8d6345e40f6b0bf



版权声明:本文为kao123yaojinqian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。