单击按钮从手机中选择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上显示其文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在html5中单击按钮将网页转换为pdf

在 Android 按钮上打印 Pdf 文件 单击

如何在 Android 中显示单选按钮的内容?

如何在对话框弹出窗口中保存textview值?

txt文件如何转成pdf文件

Mac系统下怎样修改PDF文件