单击按钮从手机中选择pdf文件并在textview上显示其文件名
Posted
技术标签:
【中文标题】单击按钮从手机中选择pdf文件并在textview上显示其文件名【英文标题】:Select pdf file from phone on button click and display its file name on textview 【发布时间】:2017-02-03 10:43:48 【问题描述】:我想通过单击按钮从手机中选择 pdf 文件并在文本视图中显示其文件名。到目前为止,我已经完成了打开文件管理器以在按钮单击时选择 pdf
btnUpload.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
startActivity(intent);
);
如何获取textview
上的选定文件名??
【问题讨论】:
获取选中文件的uri并从中获取文件名。 也许使用startActivityForResult
并实现OnActivityResult
来处理返回的文件名。
【参考方案1】:
点击手
val intentPDF = Intent(Intent.ACTION_OPEN_DOCUMENT).apply
type = "application/pdf"
addCategory(Intent.CATEGORY_OPENABLE)
putExtra(DocumentsContract.EXTRA_INITIAL_URI, true)
startActivityForResult(
Intent.createChooser(intentPDF, "Open with"),
1001
)
在 onActivityResult 中
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK)
when (requestCode)
1001->
data?.let
it.data?.alsouri ->
val intent = Intent(Intent.ACTION_VIEW,uri)
intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
if (intent.resolveActivity(getPackageManager()) == null)
Toast.makeText(this,"No app found to open Document!", Toast.LENGTH_SHORT).show()
else
startActivity(intent)
`
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:您可以执行以下操作:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
String fileName = getFileName(this, data.getData());
yourTextView.setText(fileName);
public String getFileName(Context context, Uri uri)
if (uri != null && context != null)
Cursor returnCursor =
context.getContentResolver().query(uri, null, null, null, null);
if(returnCursor != null)
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
returnCursor.moveToFirst();
if(nameIndex >= 0 && sizeIndex >= 0)
Log.d("File Name : " + returnCursor.getString(nameIndex));
Log.d("File Size : " + Long.toString(returnCursor.getLong(sizeIndex)));
Boolean isValidFile = checkFormat(returnCursor.getString(nameIndex));
if(!isValidFile)
return returnCursor.getString(nameIndex);
private Boolean checkOtherFileType(String filePath)
if(!Utility.isNullOrEmpty(filePath))
String filePathInLowerCase = filePath.toLowerCase();
if(filePathInLowerCase.endsWith(".pdf"))
return true;
return false;
希望对你有所帮助
【讨论】:
checkFormat() 方法检查其是否为有效的 pdf 格式文件【参考方案3】:在 startActivity(intent); 的地方使用 startActivityForResult(intent, 1212) 并在 onActivityResult
中执行以下操作@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
switch (requestCode)
case 1212:
if (resultCode == RESULT_OK)
// Get the Uri of the selected file
Uri uri = data.getData();
String uriString = uri.toString();
File myFile = new File(uriString);
String path = myFile.getAbsolutePath();
String displayName = null;
if (uriString.startsWith("content://"))
Cursor cursor = null;
try
cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst())
displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
finally
cursor.close();
else if (uriString.startsWith("file://"))
displayName = myFile.getName();
break;
super.onActivityResult(requestCode, resultCode, data);
【讨论】:
@Shailesh 不,它只是一个与其他请求代码不同的随机数 在 I Ball 选项卡中我收到 FileNotFoundException @nikhil【参考方案4】:添加您的getPDFPath
方法:
public String getPDFPath(Uri uri)
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
String[] projection = MediaStore.Images.Media.DATA ;
Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
在您的情况下,此代码专门用于来自 DonwloadProvider 的文档,以便进一步实施检查Paul Burke answer。我个人使用他的aFileChooser library 来避免此类问题。
希望这会有所帮助!
【讨论】:
以上是关于单击按钮从手机中选择pdf文件并在textview上显示其文件名的主要内容,如果未能解决你的问题,请参考以下文章