Java 如何从Intent接收文件路径

Java 如何从Intent接收文件路径,java,android,android-intent,Java,Android,Android Intent,在我的应用程序中,我有一个文本编辑,保存我的应用程序要处理的文件的路径。我有一个浏览按钮,用户可以选择文件。选择文本后,编辑应包含路径/文件信息。 在按钮的onClick方法中,我有以下代码: Intent intent = new Intent( Intent.ACTION_GET_CONTENT ); intent.setType ( "*/*" ); startActivity ( Intent.createChooser ( intent, "Select a file" ) )

在我的应用程序中,我有一个文本编辑,保存我的应用程序要处理的文件的路径。我有一个浏览按钮,用户可以选择文件。选择文本后,编辑应包含路径/文件信息。 在按钮的onClick方法中,我有以下代码:

 Intent intent = new Intent( Intent.ACTION_GET_CONTENT ); 
 intent.setType ( "*/*" );
 startActivity ( Intent.createChooser ( intent, "Select a file" ) );

用户完成后如何获取Uri?

startActivityForResult()
per,建议位于

开始一项活动

活动表示应用程序中的单个屏幕。您可以通过将意图传递给startActivity()来启动>活动的新实例。意图描述要启动的活动,并携带任何必要的数据

如果希望在活动完成时从中接收结果,请调用startActivityForResult()。您的活动在活动的onActivityResult()回调中将结果作为单独的意图对象接收。有关更多信息,请参阅《活动指南》


startActivityForResult()
per,建议位于

开始一项活动

活动表示应用程序中的单个屏幕。您可以通过将意图传递给startActivity()来启动>活动的新实例。意图描述要启动的活动,并携带任何必要的数据

如果希望在活动完成时从中接收结果,请调用startActivityForResult()。您的活动在活动的onActivityResult()回调中将结果作为单独的意图对象接收。有关更多信息,请参阅《活动指南》


我的最终代码,满足我的需要

    public void btnPress_onClick ( View v )
  {
   Intent intent = new Intent ( Intent.ACTION_GET_CONTENT );
    switch ( v.getId ( ) )
      {
        case R.id.btnFilesystem:
          setContentView ( R.layout.filesystem );
          txtFileSource = findViewById ( R.id.txtboxSourcePath );
          txtFileDest = findViewById ( R.id.txtboxDestPath );
          break;
        case R.id.btnTextEdit:
          setContentView ( R.layout.textedit );
          textBox = findViewById ( R.id.textEditField );
          break;
        case R.id.btnHelp:
          setContentView ( R.layout.help );
          break;
        case R.id.btnSecurity:
          setContentView ( R.layout.security );
          spnrPivotTable = findViewById ( R.id.spnrSelectPivotTable );
          showKey = findViewById ( R.id.chkShowKey );
          passKey = findViewById ( R.id.txtPassKey );
          break;
        case R.id.btnHome:
          setContentView ( R.layout.main );
          break;
        case R.id.btnBrowseSource: 
          intent.setType ( "*/*" );
          startActivityForResult ( Intent.createChooser ( intent, "Select a file" ), BROWSE_SOURCE );

          break;
        case R.id.btnBrowseDest:
          intent.setType ( "*/*" );
          startActivityForResult ( Intent.createChooser ( intent, "Select a file" ), BROWSE_DEST );
          break;
        default:
          FancyToast.makeText ( MainActivity.this, "Function not yet coded.", Toast.LENGTH_SHORT, FancyToast.INFO, true ).show ( ); 
      }
  }

@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data )
  {
    switch ( requestCode )
      {
        case BROWSE_SOURCE:
          if ( resultCode == RESULT_OK )
            {
              txtFileSource.setText ( data.getData ( ).getPath ( ) );
            } else
            {
              FancyToast.makeText ( MainActivity.this, "An Error occured", FancyToast.ERROR, FancyToast.LENGTH_LONG, true ).show ( );
            }
          break;
        case BROWSE_DEST:
          if ( resultCode == RESULT_OK )
            {
              txtFileDest.setText ( data.getData ( ).getPath ( ) );
            } else
            {
              FancyToast.makeText ( MainActivity.this, "An Error occured", FancyToast.ERROR, FancyToast.LENGTH_LONG, true ).show ( );
            }
          break;
      }
  }

我的最终代码,满足我的需要

    public void btnPress_onClick ( View v )
  {
   Intent intent = new Intent ( Intent.ACTION_GET_CONTENT );
    switch ( v.getId ( ) )
      {
        case R.id.btnFilesystem:
          setContentView ( R.layout.filesystem );
          txtFileSource = findViewById ( R.id.txtboxSourcePath );
          txtFileDest = findViewById ( R.id.txtboxDestPath );
          break;
        case R.id.btnTextEdit:
          setContentView ( R.layout.textedit );
          textBox = findViewById ( R.id.textEditField );
          break;
        case R.id.btnHelp:
          setContentView ( R.layout.help );
          break;
        case R.id.btnSecurity:
          setContentView ( R.layout.security );
          spnrPivotTable = findViewById ( R.id.spnrSelectPivotTable );
          showKey = findViewById ( R.id.chkShowKey );
          passKey = findViewById ( R.id.txtPassKey );
          break;
        case R.id.btnHome:
          setContentView ( R.layout.main );
          break;
        case R.id.btnBrowseSource: 
          intent.setType ( "*/*" );
          startActivityForResult ( Intent.createChooser ( intent, "Select a file" ), BROWSE_SOURCE );

          break;
        case R.id.btnBrowseDest:
          intent.setType ( "*/*" );
          startActivityForResult ( Intent.createChooser ( intent, "Select a file" ), BROWSE_DEST );
          break;
        default:
          FancyToast.makeText ( MainActivity.this, "Function not yet coded.", Toast.LENGTH_SHORT, FancyToast.INFO, true ).show ( ); 
      }
  }

@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data )
  {
    switch ( requestCode )
      {
        case BROWSE_SOURCE:
          if ( resultCode == RESULT_OK )
            {
              txtFileSource.setText ( data.getData ( ).getPath ( ) );
            } else
            {
              FancyToast.makeText ( MainActivity.this, "An Error occured", FancyToast.ERROR, FancyToast.LENGTH_LONG, true ).show ( );
            }
          break;
        case BROWSE_DEST:
          if ( resultCode == RESULT_OK )
            {
              txtFileDest.setText ( data.getData ( ).getPath ( ) );
            } else
            {
              FancyToast.makeText ( MainActivity.this, "An Error occured", FancyToast.ERROR, FancyToast.LENGTH_LONG, true ).show ( );
            }
          break;
      }
  }

我确实读过。我尽可能清楚地写下了我的问题。检查这个-->我确实读过。我尽可能清楚地写下我的问题。检查此-->确定!这(以及斯瓦蒂的链接)让我走上了我希望的正确道路。我正在获取数据,现在可以使用它了。谢谢!看起来你只是需要一点推动才能摆脱困境。请/随时编辑我的答案,无论您在ActivityResult()上找到了什么。回调。。。如果你能忍受!好啊这(以及斯瓦蒂的链接)让我走上了我希望的正确道路。我正在获取数据,现在可以使用它了。谢谢!看起来你只是需要一点推动才能摆脱困境。请/随时编辑我的答案,无论您在ActivityResult()上找到了什么。回调。。。如果你能忍受!