使用ACTION_OPEN_DOCUMENT打开文本文件

时间:2014-04-09 19:01:54

标签: android android-intent

我正在尝试将'EditText'设置为简单txt文件的内容。在查看开发者页面后,我偶然发现了一些获取照片的代码。我编辑了我认为适合我的需求,但它不起作用:

private void importText(){
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("text/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0 && resultCode == RESULT_OK) {
        String textContent = data.getDataString();
        mEditText.setText(textContent);
    }
}

它的作用是将EditText中的文件位置的字符串名称放在其中,而不是它的内容。我的应用程序现在只支持API 19,所以我认为我可以将其用作功能。使用ACTION_OPEN_DOCUMENT是否可以使用此功能,还是需要执行其他操作?

2 个答案:

答案 0 :(得分:1)

您需要按照documentation中的说明从Uri中检索输入流。 (第34节;获取输入流")。

答案 1 :(得分:0)

使用以下方法读取数据:

 public static String readTextFromUri(Context context, Uri uri) throws IOException {
    StringBuilder stringBuilder = new StringBuilder();
    try (InputStream inputStream =
                 context.getContentResolver().openInputStream(uri);
         BufferedReader reader = new BufferedReader(
                 new InputStreamReader(Objects.requireNonNull(inputStream)))) {
        String line;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
        }
    }
    return stringBuilder.toString();
}

并从onActivityResult方法的给定意图中获取uri:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0 && resultCode == RESULT_OK) {
       Uri uri = data.getData();
       String myText = readTextFromUri(yourContext , uri);
    }
}