gpt4 book ai didi

android - 获取文件的名称和完整路径

转载 作者:行者123 更新时间:2023-11-30 00:50:22 25 4
gpt4 key购买 nike

我使用 Intent ACTION_GET_CONTENT 来显示手机内存中最近的文件。这包括图像、pdf、谷歌驱动器文档(pdf、xlsx),如下面的屏幕截图所示。我想获取名称和完整路径,以便将文件上传到服务器。到目前为止,我/正在正确获取 MIME 类型。

public class MainActivity extends AppCompatActivity {

Button btn;
TextView txt;
private final static int EXTERNAL = 111;
private final static int ATTACH = 11;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn = (Button)findViewById(R.id.btn);
txt = (TextView)findViewById(R.id.txt);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
photoIntent();
} else {
if (shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// showToast("Permission Required...");
}
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL);
}


} else {

photoIntent();
}
}
});



}

private void photoIntent() {
Intent intent = new Intent();
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Complete action using"), ATTACH);
}

@Override
public void onRequestPermissionsResult(int requestcode, String[] permission, int[] grantRes){

if (requestcode == EXTERNAL) {
if (grantRes[0] == PackageManager.PERMISSION_GRANTED) {
photoIntent();
} else {
Toast.makeText(this, "Unable to Access Image", Toast.LENGTH_SHORT).show();
}
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == ATTACH && resultCode == RESULT_OK){
Uri uri = data.getData();
System.out.println("sammy_sourceUri "+uri);
String mimeType = getContentResolver().getType(uri);
System.out.println("sammy_mimeType "+ mimeType);



}

}
}

enter image description here

最佳答案

I want to get the name and full path so that I can upload the file to server

没有“完整路径”,因为可能没有"file"。

您正在调用 ACTION_GET_CONTENT。这会为某些内容返回一个 Uri。该内容的来源取决于用户选择的 ACTION_GET_CONTENT Activity 的开发人员。那可能是:

  • 文件系统上的一个普通文件,恰好是您可以访问的文件
  • 文件系统上驻留在您无法访问的地方的普通文件,例如其他应用程序的内部存储
  • 需要某种转换才能使用的文件,例如解密
  • 数据库中的BLOB
  • 即时生成的内容,即 Stack Overflow 服务器即时生成此网页的方式
  • 等等

要使用 Uri 中的内容,请使用 ContentResolveropenInputStream()

how to use this InputStream to upload to server API as file?

您选择的 HTTP API 要么支持 InputStream 作为此内容的来源,要么不支持。如果是,直接使用 InputStream 即可。如果没有,请使用 InputStream 将内容的临时副本作为您可以直接访问的文件(例如,在 getCacheDir() 中) ), 上传该文件,然后在上传完成后删除该文件。

关于android - 获取文件的名称和完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41135565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com