我有一个应用程序,可以让用户通过存储访问框架打开文件,编辑它们,然后覆盖之前打开的文件。简而言之,这是基本代码:
private ActivityResultLauncher<String[]> mGetContent;
private Uri OpenFileUri;
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mGetContent = registerForActivityResult(new ActivityResultContracts.OpenDocument(),
new ActivityResultCallback<Uri>() {
@Override
public void onActivityResult(Uri uri) {
try (InputStream in = getActivity().getContentResolver().openInputStream(uri))
{
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String text = reader.lines().collect(Collectors.joining("\n"));
binding.editBox.setText(text);
OpenFileUri = uri;
} catch (IOException e) {
e.printStackTrace();
}
}
});
binding.buttonOpen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mGetContent.launch(new String[] {"text/*"});
}
});
binding.buttonSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (OpenFileUri == null)
return;
try (OutputStream mOutputStream = getActivity().getContentResolver().openOutputStream(OpenFileUri, "wt")) {
try (PrintWriter p = new PrintWriter(mOutputStream)) {
String t = binding.editBox.getText().toString();
p.println(t);
} catch (Exception e1) {
e1.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
此处提供完整代码:https://github.com/pekspro/CorruptFileDemo(为不同目的创建)
该应用程序对我的大多数用户来说都运行良好,但有一个用户正在使用Xaomi 11T Pro和Android 11。我无权访问的设备:-(。其他使用Anroid 11的设备运行良好。此用户可以打开文件,但在保存文件时会引发异常(不确定是什么,没有任何日志)。我的真实应用程序也试图调用tePeristableUriPersion,但这也在此设备上引发了一个java.lang.SecurityException
。
当我运行应用程序并打开文件时,URI为:
content://com.android.externalstorage.documents/document/…
但对于该用户,它的开头是:
content://com.mi.android.globalFileexplorer.myprovider/external_files/Documents/…
这让我怀疑Mi File Manager在Xaomi设备上用作文档选择器。
如果我直接在小米文件管理器中打开一个文件,我看到它只有只读权限。
(某些)Xaomi设备是否会出现此行为?出于测试目的,可以强制我的应用程序使用Mi文件管理器作为文档选择器吗?
storage access framework是否在Xaomi设备上工作?
是的,你发布的所有作品。
只有提供者不提供对用户选择的文件的写访问权限。
(但也许有一个设置,会给它??...)
我正试图在后台获取用户位置。在我的手机(htc one m7)上一切都很好,但出于某种原因,它不能在我测试的两个设备上工作:三星galaxy s3索尼Xperia Z1 顺便说一句:我把所有东西都添加到了清单中。
我有一个网站,必须响应移动电话。我用我的桌面创建了它。当我调整浏览器窗口时,它在手机上工作得很好,但当我在我真正的手机上检查它:三星Galaxy S2时,它对手机视图没有反应。 会有什么问题吗?
问题内容: 我正在使用JDBC做一个Android应用程序,而不使用任何Web服务将数据发送到数据库。我使用Android 2.2模拟器进行了实验,并且能够将数据发送到MySQL DB(LOCALHOST)。之后,我尝试使用Android 2.2设备进行发送,然后更改了with 的路径 。 xx.xx.xx.xx来自我的本地主机。但是它在设备中不起作用。可能是什么原因。 主要疑问: Android
问题内容: 我想知道是否有可能检测浏览器是否在iOS上运行,这与使用Modernizr进行功能检测的方式类似(尽管这显然是设备检测而非功能检测)。 通常,我宁愿使用功能检测,但我需要根据该问题确定设备是否为iOS,因为它们处理视频的方式YouTube API无法在iPad / iPhone/非Flash设备上使用 问题答案: 我不喜欢User Agent嗅探,但是这是你的处理方式: 另一种方法是依
我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。 Gradle文件: 我知道这
问题内容: CSS悬停功能是否可以在移动设备上使用?我有一个css悬停类,在常规的Web浏览器上可以正常工作,但在移动浏览器上却不能工作。 问题答案: 的伪类需要定点(图形输入)设备,能够区分动作的 指向 和 选择/激活。 通常在带有触摸界面的移动设备上,您没有前者,只有后者。另外,某些笔界面仅允许激活,而不能指向。 伪类适用,而用户指定的元件(有一些指示设备),但不将其激活。例如,当光标(鼠标指