接收共享文件
Receiving a shared file
在这种情况下,我无法通过 whats'app 接收 .txt
文件。
我在 activity:
中得到了意图
//check intent
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
控制它是否是一个ACTION_SEND
,通过一个Bundle
提取extra
,创建一个新的File
并尝试将其转换成一个String
:
if (Intent.ACTION_SEND.equals(action) && Objects.equals (type, "text/plain")) {
Log.d ("Intent", "have shared");
Bundle bundle = intent.getExtras ();
Uri uri = (Uri) bundle.get(Intent.EXTRA_STREAM);
Log.d ("uri ",
uri.getAuthority ()+" "+
uri.getPath ()+" "+
uri.getFragment ()+" "+
uri.getUserInfo ());
File file = new File (uri.getPath ());
Log.d("file" , file.toString ()+" "+file.getPath ()+" "+file.getName ()+" "+ file.exists ()+" "+ file.isFile ()+" "+file.isDirectory ()+" "+file.isAbsolute ()+" "+file.isHidden ());
try {
StringBuilder text = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
//read line by line
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
Log.d ("String", text.toString ());
} catch (java.io.IOException e) {
e.printStackTrace ();
}
调试日志的结果是:
D/uri: com.whatsapp.provider.media /item/95 null null
D/file: /item/95 /item/95 95 false false false true false
我在 BufferedReader
上收到此错误:
W/System.err: java.io.FileNotFoundException: /item/95: open failed: ENOENT (No such file or directory)
我不明白为什么。
有人可以帮我吗?
您没有获得文件路径。您将获得 Uri
。 Uri
不是文件,您的 Uri
具体有一个 content
方案,而不是 file
方案。
删除 File file = new File (uri.getPath ());
。将 new FileReader(file)
替换为 new InputStreamReader(getContentResolver().openInputStream(uri))
,以处理 content
和 file
方案。
在这种情况下,我无法通过 whats'app 接收 .txt
文件。
我在 activity:
//check intent
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
控制它是否是一个ACTION_SEND
,通过一个Bundle
提取extra
,创建一个新的File
并尝试将其转换成一个String
:
if (Intent.ACTION_SEND.equals(action) && Objects.equals (type, "text/plain")) {
Log.d ("Intent", "have shared");
Bundle bundle = intent.getExtras ();
Uri uri = (Uri) bundle.get(Intent.EXTRA_STREAM);
Log.d ("uri ",
uri.getAuthority ()+" "+
uri.getPath ()+" "+
uri.getFragment ()+" "+
uri.getUserInfo ());
File file = new File (uri.getPath ());
Log.d("file" , file.toString ()+" "+file.getPath ()+" "+file.getName ()+" "+ file.exists ()+" "+ file.isFile ()+" "+file.isDirectory ()+" "+file.isAbsolute ()+" "+file.isHidden ());
try {
StringBuilder text = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
//read line by line
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
Log.d ("String", text.toString ());
} catch (java.io.IOException e) {
e.printStackTrace ();
}
调试日志的结果是:
D/uri: com.whatsapp.provider.media /item/95 null null
D/file: /item/95 /item/95 95 false false false true false
我在 BufferedReader
上收到此错误:
W/System.err: java.io.FileNotFoundException: /item/95: open failed: ENOENT (No such file or directory)
我不明白为什么。
有人可以帮我吗?
您没有获得文件路径。您将获得 Uri
。 Uri
不是文件,您的 Uri
具体有一个 content
方案,而不是 file
方案。
删除 File file = new File (uri.getPath ());
。将 new FileReader(file)
替换为 new InputStreamReader(getContentResolver().openInputStream(uri))
,以处理 content
和 file
方案。