下面列出了android.webkit.URLUtil#guessFileName ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public String getMediafilename(FeedMedia media) {
String filename;
String titleBaseFilename = "";
// Try to generate the filename by the item title
if (media.getItem() != null && media.getItem().getTitle() != null) {
String title = media.getItem().getTitle();
// Delete reserved characters
titleBaseFilename = title.replaceAll("[\\\\/%\\?\\*:|<>\"\\p{Cntrl}]", "");
titleBaseFilename = titleBaseFilename.trim();
}
String URLBaseFilename = URLUtil.guessFileName(media.getDownload_url(),
null, media.getMime_type());
;
if (titleBaseFilename != "") {
// Append extension
filename = titleBaseFilename + FilenameUtils.EXTENSION_SEPARATOR +
FilenameUtils.getExtension(URLBaseFilename);
} else {
// Fall back on URL file name
filename = URLBaseFilename;
}
return filename;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case RequestCode.SELECT_JSON_FILE:
selectedFilePath = data.getData();
rlJsonUp.setVisibility(View.GONE);
rlJsonPath.setVisibility(View.VISIBLE);
tlJsonPwd.setVisibility(View.VISIBLE);
if (selectedFilePath != null) {
btnRestore.setEnabled(true);
String fileName = URLUtil.guessFileName(selectedFilePath.getLastPathSegment(), null, null);
tvJsonPath.setText(fileName);
} else {
Toast.makeText(getApplicationContext(), getString(R.string.restore_backup_wrong_file_name), Toast.LENGTH_LONG).show();
}
break;
case RequestCode.QR_CODE_REQUEST_CODE:
String result = data.getStringExtra(Extras.QR_CODE_RESULT);
if (!result.isEmpty()) {
String address = filterAddress(result);
etBackupPhrase.setText(address);
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case RequestCode.SELECT_JSON_FILE:
selectedFilePath = data.getData();
rlJsonUp.setVisibility(View.GONE);
rlJsonPath.setVisibility(View.VISIBLE);
tlJsonPwd.setVisibility(View.VISIBLE);
if (selectedFilePath != null) {
btnRestore.setEnabled(true);
String fileName = URLUtil.guessFileName(selectedFilePath.getLastPathSegment(), null, null);
tvJsonPath.setText(fileName);
} else {
Toast.makeText(getApplicationContext(), getString(R.string.restore_backup_wrong_file_name), Toast.LENGTH_LONG).show();
}
break;
case RequestCode.QR_CODE_REQUEST_CODE:
String result = data.getStringExtra(Extras.QR_CODE_RESULT);
if (!result.isEmpty()) {
String address = filterAddress(result);
etBackupPhrase.setText(address);
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case RequestCode.SELECT_JSON_FILE:
selectedFilePath = data.getData();
rlJsonUp.setVisibility(View.GONE);
rlJsonPath.setVisibility(View.VISIBLE);
tlJsonPwd.setVisibility(View.VISIBLE);
if (selectedFilePath != null) {
btnRestore.setEnabled(true);
String fileName = URLUtil.guessFileName(selectedFilePath.getLastPathSegment(), null, null);
tvJsonPath.setText(fileName);
} else {
Toast.makeText(getApplicationContext(), getString(R.string.restore_backup_wrong_file_name), Toast.LENGTH_LONG).show();
}
break;
case RequestCode.QR_CODE_REQUEST_CODE:
String result = data.getStringExtra(Extras.QR_CODE_RESULT);
if (!result.isEmpty()) {
String address = filterAddress(result);
etBackupPhrase.setText(address);
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public static void downloadFile(final Activity activity, final String url,
final String userAgent, final String contentDisposition, final boolean privateBrowsing) {
String fileName = URLUtil.guessFileName(url, null, null);
DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null,
privateBrowsing);
Log.i(Constants.TAG, "Downloading" + fileName);
}
@Override
public void onDownloadStart(final String url, final String userAgent,
final String contentDisposition, final String mimetype, long contentLength) {
String fileName = URLUtil.guessFileName(url, contentDisposition, mimetype);
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
DownloadHandler.onDownloadStart(mActivity, url, userAgent,
contentDisposition, mimetype, false);
break;
case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); // dialog
builder.setTitle(fileName)
.setMessage(mActivity.getResources().getString(R.string.dialog_download))
.setPositiveButton(mActivity.getResources().getString(R.string.action_download),
dialogClickListener)
.setNegativeButton(mActivity.getResources().getString(R.string.action_cancel),
dialogClickListener).show();
Log.i(Constants.TAG, "Downloading" + fileName);
}
/**
* Enqueue a download request to the DownloadManager and starts downloading the OMA content.
*
* @param downloadId The unique identifier maintained by the Android DownloadManager.
* @param downloadInfo Information about the download.
* @param omaInfo Information about the OMA content.
*/
private void downloadOMAContent(long downloadId, DownloadInfo downloadInfo, OMAInfo omaInfo) {
if (omaInfo == null) return;
String mimeType = omaInfo.getDrmType();
if (mimeType == null) {
mimeType = getOpennableType(mContext.getPackageManager(), omaInfo);
}
String fileName = omaInfo.getValue(OMA_NAME);
String url = omaInfo.getValue(OMA_OBJECT_URI);
if (TextUtils.isEmpty(fileName)) {
fileName = URLUtil.guessFileName(url, null, mimeType);
}
DownloadInfo newInfo = DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
.setFileName(fileName)
.setUrl(url)
.setMimeType(mimeType)
.setDescription(omaInfo.getValue(OMA_DESCRIPTION))
.setContentLength(getSize(omaInfo))
.build();
// If installNotifyURI is not empty, the downloaded content cannot
// be used until the PostStatusTask gets a 200-series response.
// Don't show complete notification until that happens.
DownloadItem item = new DownloadItem(true, newInfo);
item.setSystemDownloadId(downloadId);
DownloadManagerService.getDownloadManagerService(mContext).enqueueDownloadManagerRequest(
item, omaInfo.isValueEmpty(OMA_INSTALL_NOTIFY_URI));
mPendingOMADownloads.put(downloadId, omaInfo);
}
/**
* For certain download types(OMA for example), android DownloadManager should
* handle them. Call this function to intercept those downloads.
*
* @param url URL to be downloaded.
* @return whether the DownloadManager should intercept the download.
*/
public boolean shouldInterceptContextMenuDownload(String url) {
Uri uri = Uri.parse(url);
String scheme = uri.normalizeScheme().getScheme();
if (!"http".equals(scheme) && !"https".equals(scheme)) return false;
String path = uri.getPath();
// OMA downloads have extension "dm" or "dd". For the latter, it
// can be handled when native download completes.
if (path != null && (path.endsWith(".dm"))) {
if (mTab == null) return true;
String fileName = URLUtil.guessFileName(
url, null, OMADownloadHandler.OMA_DRM_MESSAGE_MIME);
final DownloadInfo downloadInfo =
new DownloadInfo.Builder().setUrl(url).setFileName(fileName).build();
WindowAndroid window = mTab.getWindowAndroid();
if (window.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) {
onDownloadStartNoStream(downloadInfo);
} else if (window.canRequestPermission(permission.WRITE_EXTERNAL_STORAGE)) {
PermissionCallback permissionCallback = new PermissionCallback() {
@Override
public void onRequestPermissionsResult(
String[] permissions, int[] grantResults) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onDownloadStartNoStream(downloadInfo);
}
}
};
window.requestPermissions(
new String[] {permission.WRITE_EXTERNAL_STORAGE}, permissionCallback);
}
return true;
}
return false;
}
/**
* 拷贝到某一个目录中,自动命名
* @param url
* @param dir
* @return
*/
public static File copyCacheFileToDir(String url,File dir){
url = append(url);
if (dir == null ){
return null;
}
if (!dir.isDirectory()){
throw new RuntimeException(dir + "is not a directory,you should call copyCacheFile(String url,File path)");
}
if (!dir.exists()){
dir.mkdirs();
}
String fileName = URLUtil.guessFileName(url,"","");//android SDK 提供的方法.
// 注意不能直接采用file的getName拿到文件名,因为缓存文件是用cacheKey命名的
if (TextUtils.isEmpty(fileName)){
fileName = UUID.randomUUID().toString();
}
File newFile = new File(dir,fileName);
boolean isSuccess = copyCacheFile(url,newFile);
if (isSuccess){
return newFile;
}else {
return null;
}
}
/**
* Enqueue a download request to the DownloadManager and starts downloading the OMA content.
*
* @param downloadId The unique identifier maintained by the Android DownloadManager.
* @param downloadInfo Information about the download.
* @param omaInfo Information about the OMA content.
*/
private void downloadOMAContent(long downloadId, DownloadInfo downloadInfo, OMAInfo omaInfo) {
if (omaInfo == null) return;
String mimeType = omaInfo.getDrmType();
if (mimeType == null) {
mimeType = getOpennableType(mContext.getPackageManager(), omaInfo);
}
String fileName = omaInfo.getValue(OMA_NAME);
String url = omaInfo.getValue(OMA_OBJECT_URI);
if (TextUtils.isEmpty(fileName)) {
fileName = URLUtil.guessFileName(url, null, mimeType);
}
DownloadInfo newInfo = DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
.setFileName(fileName)
.setUrl(url)
.setMimeType(mimeType)
.setDescription(omaInfo.getValue(OMA_DESCRIPTION))
.setContentLength(getSize(omaInfo))
.build();
// If installNotifyURI is not empty, the downloaded content cannot
// be used until the PostStatusTask gets a 200-series response.
// Don't show complete notification until that happens.
DownloadItem item = new DownloadItem(true, newInfo);
item.setSystemDownloadId(downloadId);
DownloadManagerService.getDownloadManagerService(mContext).enqueueDownloadManagerRequest(
item, omaInfo.isValueEmpty(OMA_INSTALL_NOTIFY_URI));
mPendingOMADownloads.put(downloadId, omaInfo);
}
/**
* For certain download types(OMA for example), android DownloadManager should
* handle them. Call this function to intercept those downloads.
*
* @param url URL to be downloaded.
* @return whether the DownloadManager should intercept the download.
*/
public boolean shouldInterceptContextMenuDownload(String url) {
Uri uri = Uri.parse(url);
String scheme = uri.normalizeScheme().getScheme();
if (!"http".equals(scheme) && !"https".equals(scheme)) return false;
String path = uri.getPath();
// OMA downloads have extension "dm" or "dd". For the latter, it
// can be handled when native download completes.
if (path == null || !path.endsWith(".dm")) return false;
if (mTab == null) return true;
String fileName = URLUtil.guessFileName(
url, null, OMADownloadHandler.OMA_DRM_MESSAGE_MIME);
final DownloadInfo downloadInfo =
new DownloadInfo.Builder().setUrl(url).setFileName(fileName).build();
WindowAndroid window = mTab.getWindowAndroid();
if (window.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) {
onDownloadStartNoStream(downloadInfo);
} else if (window.canRequestPermission(permission.WRITE_EXTERNAL_STORAGE)) {
PermissionCallback permissionCallback = new PermissionCallback() {
@Override
public void onRequestPermissionsResult(
String[] permissions, int[] grantResults) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onDownloadStartNoStream(downloadInfo);
}
}
};
window.requestPermissions(
new String[] {permission.WRITE_EXTERNAL_STORAGE}, permissionCallback);
}
return true;
}
/**
* 拷贝到某一个目录中,自动命名
* @param url
* @param dir
* @return
*/
public static File copyCacheFileToDir(String url,File dir){
if (dir == null ){
return null;
}
if (!dir.isDirectory()){
throw new RuntimeException(dir + "is not a directory,you should call copyCacheFile(String url,File path)");
}
if (!dir.exists()){
dir.mkdirs();
}
String fileName = URLUtil.guessFileName(url,"","");//android SDK 提供的方法.
// 注意不能直接采用file的getName拿到文件名,因为缓存文件是用cacheKey命名的
if (TextUtils.isEmpty(fileName)){
fileName = UUID.randomUUID().toString();
}
File newFile = new File(dir,fileName);
boolean isSuccess = copyCacheFile(url,newFile);
if (isSuccess){
return newFile;
}else {
return null;
}
}
private String getFilenameFromUrl(String urlString) {
String fileName = URLUtil.guessFileName(urlString, null, null);
if (fileName.contains("#"))
return fileName.split("#")[0];
else if (fileName.contains("?"))
return fileName.split("\\?")[0];
else
return fileName;
}
/**
* Enqueue a download request to the DownloadManager and starts downloading the OMA content.
*
* @param downloadId The unique identifier maintained by the Android DownloadManager.
* @param downloadInfo Information about the download.
* @param omaInfo Information about the OMA content.
*/
@VisibleForTesting
protected void downloadOMAContent(long downloadId, DownloadInfo downloadInfo, OMAInfo omaInfo) {
if (omaInfo == null) return;
String mimeType = omaInfo.getDrmType();
if (mimeType == null) {
mimeType = getOpennableType(mContext.getPackageManager(), omaInfo);
}
String fileName = omaInfo.getValue(OMA_NAME);
String url = omaInfo.getValue(OMA_OBJECT_URI);
if (TextUtils.isEmpty(fileName)) {
fileName = URLUtil.guessFileName(url, null, mimeType);
}
DownloadInfo newInfo = DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
.setFileName(fileName)
.setUrl(url)
.setMimeType(mimeType)
.setDescription(omaInfo.getValue(OMA_DESCRIPTION))
.setBytesReceived(getSize(omaInfo))
.build();
// If installNotifyURI is not empty, the downloaded content cannot
// be used until the PostStatusTask gets a 200-series response.
// Don't show complete notification until that happens.
DownloadItem item = new DownloadItem(true, newInfo);
item.setSystemDownloadId(downloadId);
mDownloadManagerDelegate.enqueueDownloadManagerRequest(
item, omaInfo.isValueEmpty(OMA_INSTALL_NOTIFY_URI), this);
mPendingOMADownloads.put(downloadId, omaInfo);
}
/**
* For certain download types(OMA for example), android DownloadManager should
* handle them. Call this function to intercept those downloads.
*
* @param url URL to be downloaded.
* @return whether the DownloadManager should intercept the download.
*/
public boolean shouldInterceptContextMenuDownload(String url) {
Uri uri = Uri.parse(url);
String scheme = uri.normalizeScheme().getScheme();
if (!UrlConstants.HTTP_SCHEME.equals(scheme) && !UrlConstants.HTTPS_SCHEME.equals(scheme)) {
return false;
}
String path = uri.getPath();
if (!OMADownloadHandler.isOMAFile(path)) return false;
if (mTab == null) return true;
String fileName = URLUtil.guessFileName(
url, null, OMADownloadHandler.OMA_DRM_MESSAGE_MIME);
final DownloadInfo downloadInfo =
new DownloadInfo.Builder().setUrl(url).setFileName(fileName).build();
WindowAndroid window = mTab.getWindowAndroid();
if (window.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) {
onDownloadStartNoStream(downloadInfo);
} else if (window.canRequestPermission(permission.WRITE_EXTERNAL_STORAGE)) {
PermissionCallback permissionCallback = new PermissionCallback() {
@Override
public void onRequestPermissionsResult(
String[] permissions, int[] grantResults) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onDownloadStartNoStream(downloadInfo);
}
}
};
window.requestPermissions(
new String[] {permission.WRITE_EXTERNAL_STORAGE}, permissionCallback);
}
return true;
}