Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
fd165118
A
AndroidUtilCode
项目概览
mmm-rain
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fd165118
编写于
12月 22, 2018
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
差异文件
see 12/22 log
上级
8facb5f8
a7122861
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
77 addition
and
14 deletion
+77
-14
utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java
.../main/java/com/blankj/utilcode/util/AdaptScreenUtils.java
+1
-6
utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
.../lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+76
-8
未找到文件。
utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java
浏览文件 @
fd165118
...
...
@@ -12,8 +12,6 @@ public final class AdaptScreenUtils {
private
static
boolean
isInitMiui
=
false
;
private
static
Field
mTmpMetrics
;
private
static
DisplayMetrics
appDm
;
/**
* Adapt for the horizontal screen, and call it in [android.app.Activity.getResources].
*/
...
...
@@ -68,10 +66,7 @@ public final class AdaptScreenUtils {
}
private
static
void
setAppDmXdpi
(
final
float
xdpi
)
{
if
(
appDm
==
null
)
{
appDm
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
();
}
appDm
.
xdpi
=
xdpi
;
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
xdpi
=
xdpi
;
}
private
static
DisplayMetrics
getDisplayMetrics
(
Resources
resources
)
{
...
...
utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
浏览文件 @
fd165118
package
com.blankj.utilcode.util
;
import
android.content.ContentResolver
;
import
android.content.ContentUris
;
import
android.content.CursorLoader
;
import
android.database.Cursor
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Environment
;
import
android.os.ParcelFileDescriptor
;
import
android.provider.DocumentsContract
;
import
android.provider.MediaStore
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.v4.content.FileProvider
;
import
android.util.Log
;
import
java.io.File
;
import
java.io.FileDescriptor
;
/**
* <pre>
...
...
@@ -43,24 +50,85 @@ public final class UriUtils {
/**
* Uri to file.
*
* @param uri The uri.
* @param columnName The name of the target column.
* <p>e.g. {@link MediaStore.Images.Media#DATA}</p>
* @param uri The uri.
* @return file
*/
public
static
File
uri2File
(
@NonNull
final
Uri
uri
,
final
String
columnName
)
{
if
(
ContentResolver
.
SCHEME_FILE
.
equals
(
uri
.
getScheme
()))
{
return
new
File
(
uri
.
getPath
());
public
static
File
uri2File
(
@NonNull
final
Uri
uri
)
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
());
String
authority
=
uri
.
getAuthority
();
String
scheme
=
uri
.
getScheme
();
if
(
ContentResolver
.
SCHEME_FILE
.
equals
(
scheme
))
{
String
path
=
uri
.
getPath
();
if
(
path
!=
null
)
return
new
File
(
path
);
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" parse failed. -> 0"
);
return
null
;
}
else
if
(
ContentResolver
.
SCHEME_CONTENT
.
equals
(
scheme
))
{
return
getFileFromUri
(
uri
,
null
,
null
);
}
else
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
KITKAT
&&
DocumentsContract
.
isDocumentUri
(
Utils
.
getApp
(),
uri
))
{
if
(
"com.android.externalstorage.documents"
.
equals
(
authority
))
{
final
String
docId
=
DocumentsContract
.
getDocumentId
(
uri
);
final
String
[]
split
=
docId
.
split
(
":"
);
final
String
type
=
split
[
0
];
if
(
"primary"
.
equalsIgnoreCase
(
type
))
{
return
new
File
(
Environment
.
getExternalStorageDirectory
()
+
"/"
+
split
[
1
]);
}
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" parse failed. -> 2"
);
return
null
;
}
else
if
(
"com.android.providers.downloads.documents"
.
equals
(
authority
))
{
final
String
id
=
DocumentsContract
.
getDocumentId
(
uri
);
final
Uri
contentUri
=
ContentUris
.
withAppendedId
(
Uri
.
parse
(
"content://downloads/public_downloads"
),
Long
.
valueOf
(
id
)
);
return
getFileFromUri
(
contentUri
,
null
,
null
);
}
else
if
(
"com.android.providers.media.documents"
.
equals
(
authority
))
{
final
String
docId
=
DocumentsContract
.
getDocumentId
(
uri
);
final
String
[]
split
=
docId
.
split
(
":"
);
final
String
type
=
split
[
0
];
Uri
contentUri
;
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
;
}
else
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" parse failed. -> 3"
);
return
null
;
}
final
String
selection
=
"_id=?"
;
final
String
[]
selectionArgs
=
new
String
[]{
split
[
1
]};
return
getFileFromUri
(
contentUri
,
selection
,
selectionArgs
);
}
else
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" parse failed. -> 4"
);
return
null
;
}
}
else
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" parse failed. -> 5"
);
return
null
;
}
}
private
static
File
getFileFromUri
(
@NonNull
final
Uri
uri
)
{
return
getFileFromUri
(
uri
,
null
,
null
);
}
private
static
File
getFileFromUri
(
@NonNull
final
Uri
uri
,
final
String
selection
,
final
String
[]
selectionArgs
)
{
CursorLoader
cl
=
new
CursorLoader
(
Utils
.
getApp
());
cl
.
setUri
(
uri
);
cl
.
setProjection
(
new
String
[]{
columnName
});
cl
.
setProjection
(
new
String
[]{
"_data"
});
Cursor
cursor
=
null
;
try
{
cursor
=
cl
.
loadInBackground
();
int
columnIndex
=
cursor
.
getColumnIndexOrThrow
(
columnName
);
int
columnIndex
=
cursor
.
getColumnIndexOrThrow
(
"_data"
);
cursor
.
moveToFirst
();
return
new
File
(
cursor
.
getString
(
columnIndex
));
}
catch
(
Exception
e
)
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" parse failed. -> 1"
);
return
null
;
}
finally
{
if
(
cursor
!=
null
)
{
cursor
.
close
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录