如何提示文件管理器进入安卓应用程序中的已知路径?



我的应用程序中有以下活动:

public class DisplaySettingsActivity extends AppCompatActivity implements View.OnClickListener {

Button saveIntoFile;
TextView msg;
private ActivityResultLauncher<String> requestPermissionLauncher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_settings);

requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
Log.d("H300s","Permissions Callback");
if (isGranted) {
Log.d("H300s","Permission Accepted 2");
saveFile();
} else {
permissionSaveDenied();
}
});
this.saveIntoFile = (Button)findViewById(R.id.save);
this.saveIntoFile.setOnClickListener(this);
}
private void saveFile(){
Log.d("Η300s","Saving");
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)) {
Log.e("H300s","Unable to detect external storage");
saveMsgHandler(null);
return;
}
this.saveIntoFile.setEnabled(false);
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyMMdd");
File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
file = new File( file.getAbsolutePath(),"voip_h300s_"+pattern.format(LocalDate.now())+".txt");
Log.d("H300s",file.toString());
try {
file.createNewFile();
PrintWriter out = new PrintWriter(new FileWriter(file));
out.println("SOME VALUES");
out.close();
saveMsgHandler(file.getAbsolutePath());
} catch (Exception e) {
saveMsgHandler(null);
}
}
@Override
public void onBackPressed() {
return;
}
private void saveMsgHandler(String savePath){
if (savePath == null) {
msg.setText(R.string.could_not_save_settings);
int errorColor = ContextCompat.getColor(this, R.color.error);
msg.setBackgroundColor(errorColor);
} else {
String string = String.format(getString(R.string.save_success),savePath);
msg.setText(string);
int success = ContextCompat.getColor(this, R.color.success);
msg.setBackgroundColor(success);
}
msg.setVisibility(View.VISIBLE);
this.saveIntoFile.setEnabled(true);
}
private void permissionSaveDenied(){
msg.setVisibility(View.VISIBLE);
msg.setText(R.string.could_not_save_settings);
int errorColor = ContextCompat.getColor(this, R.color.error);
msg.setBackgroundColor(errorColor);
this.saveIntoFile.setEnabled(true);
}
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.d("H300s","Permission Accepted");
saveFile();
} else {
requestPermissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE );
}
}
}

我希望一旦我保存了文件,就能够提示进入androids文件管理器并列出保存的文件。任何提供的解决方案都会告诉我在保存之前选择一个路径,如本答案或此问题所示,但我只想在成功保存文件后将文件显示在设备的文件管理器中。

到目前为止,我开发的是这种方法:

public void displayFileIntoFileManager(String path){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivity(intent, 7);
}

作为从按钮调用的方法,一旦我将文件保存在saveFile方法中。但是,我如何才能提供意图的路径才能显示出来呢?

我只想将文件列到设备的文件管理器中。

我只想在成功保存文件后将文件显示在设备的文件管理器中。

抱歉,"在包含特定文件的目录上打开文件管理器"没有标准的Intent操作。

到目前为止,我开发的是这种方法

ACTION_GET_CONTENT是允许用户选择一段内容。如果您不希望用户这样做,那么这不是一个合适的Intent操作。

如何在 android 应用程序中提示文件管理器进入已知路径?

错误的问题。

你应该问:

如何让ACTION_GET_CONTENT、ACTION_OPEN_DOCUMENT和ACTION_OPEN_DOCUMENT_TREE在预先确定的目录中打开?

这个问题以前已经回答过了。

诀窍是使用额外的INITIAL_URI

最新更新