在Android中选择保存原始数据
我试图在一个应用程序中保存一些数组,以便在其他平台(C++)中使用它们。我使用pick方法让用户选择文件名和目录,但首先我尝试像这样定义根目录,因为创建文档的处理需要Android 10在正确定义的目录中启动: ''' ''' 清单中的权限为: '''在Android中选择保存原始数据,android,file,exception,permissions,save,Android,File,Exception,Permissions,Save,我试图在一个应用程序中保存一些数组,以便在其他平台(C++)中使用它们。我使用pick方法让用户选择文件名和目录,但首先我尝试像这样定义根目录,因为创建文档的处理需要Android 10在正确定义的目录中启动: ''' ''' 清单中的权限为: ''' <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission androi
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE"/>
'''
OPENDOCUMENT和CREATEDOCUMENT的result意图在activityresult的重写方法中提供了有关拾取文件的信息。如果获得了文件的URI,那么可以使用contentResolver.openFileDescriptor打开,并使用getFileDescriptor()方法执行FileOutputStream或FileInputStream同步。像这样:
'''
'''
我需要知道定义根目录和目录下载的正确方法,以及从意图结果中收集的提货名称和目录。我做了很多没有解决方案的试验。欢迎提供任何帮助。我需要做一些解释,以找到有经验的人帮助我解决问题。我是一个老人,但我自学Java和Android不到一年,所以我有其他的观点,我的观点决定了什么有并发症或没有。开源语言必须有一个清晰的开源定义和实现。持久性存储数据的问题从一开始就存在。Java语言对文件和目录使用相同的类。所有操作系统都直接执行,没有安全问题。为了解决这个问题,开发人员必须使用字符串操作来确定它是文件还是目录,因为不存在公共类目录扩展文件。这里出现了操作系统用于路径的符号问题,因此有必要向操作系统询问它在system.getProperty(“file.separator”)中使用了什么,在这个解决的问题出现在Uri之后。Uri是与路径类似的持久存储数据的另一个引用,具有关于存储信息的更多描述性属性。但是有一个代数问题。转换不是线性的,因为它不是biyective.with File文件引用。可以对同一文件使用无限Uri,对同一路径使用无限文件。您可以执行以下操作:uri fileUri2=DocumentsContract.buildDocumentUri(AUTORITY,file.getPath());fileUri=DocumentsContract.buildDocumentUri(AUTORITY,file.getPath());在此之后,将显示光标以添加更多属性(项目),并将Matrixcursor作为其数据库。这也可以对同一id具有无限Uri。然后对同一文件具有无限Uri,对同一路径具有无限文件,并且该路径是隐藏的,没有直接方法,要确定它是路径还是目录,必须执行字符串操作。因此,无限制的文档id可以访问同一个文件,而不是文件中的目录和文件权限,例如没有安全问题的操作系统,用户和程序是否允许访问它。我需要做一些解释,以找到有经验的人来帮我解决问题。我是一个老人,但我自学Java和Android不到一年,所以我有其他的观点,我的观点决定了什么有并发症或没有。开源语言必须有一个清晰的开源定义和实现。持久性存储数据的问题从一开始就存在。Java语言对文件和目录使用相同的类。所有操作系统都直接执行,没有安全问题。为了解决这个问题,开发人员必须使用字符串操作来确定它是文件还是目录,因为不存在公共类目录扩展文件。这里出现了操作系统用于路径的符号问题,因此有必要向操作系统询问它在system.getProperty(“file.separator”)中使用了什么,在这个解决的问题出现在Uri之后。Uri是与路径类似的持久存储数据的另一个引用,具有关于存储信息的更多描述性属性。但是有一个代数问题。转换不是线性的,因为它不是biyective.with File文件引用。可以对同一文件使用无限Uri,对同一路径使用无限文件。您可以执行以下操作:uri fileUri2=DocumentsContract.buildDocumentUri(AUTORITY,file.getPath());fileUri=DocumentsContract.buildDocumentUri(AUTORITY,file.getPath());在此之后,将显示光标以添加更多属性(项目),并将Matrixcursor作为其数据库。这也可以对同一id具有无限Uri。然后对同一文件具有无限Uri,对同一路径具有无限文件,并且该路径是隐藏的,没有直接方法,要确定它是路径还是目录,必须执行字符串操作。因此,无限制的文档id可以访问同一个文件,而不是像操作系统那样的文件中的目录和文件权限,这些操作系统没有安全问题,用户和程序是否允许访问它。
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<provider
android:name="com.sistemaderiegoandroid_arduino.MyDocuments"
android:authorities="com.sistemaderiegoandroid_arduino.documents"
android:grantUriPermissions="true"
android:exported="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
</provider>
FileDescriptor fdR = null;
parcelFileDescriptorL = getContentResolver().openFileDescriptor(fileNameL, "MODE_APPEND", null);
fdL = parcelFileDescriptorL.getFileDescriptor();
arduinoDataL = new FileOutputStream(fdL);
serializatorDataL = new ObjectOutputStream(arduinoDataL);
for (int i = 0; i < allData.arrayDatosLuz.length; i++) {
serializatorDataL.writeObject(allData.arrayDatosLuz[i]);
serializatorDataL.flush();
fdL.sync();
}
;
serializatorDataL.close();
int granted = PackageManager.PERMISSION_GRANTED;
grantRequested =
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN) != granted;
if ((grantRequested)) {
if ((ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) != PackageManager.PERMISSION_GRANTED)) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(grantDialog).setMessage(R.string.requestWriteSetting);
alertDialogBuilder.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if (callBackFlag == 0) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
startActivity(intent);
callBackFlag++;
int granted = PackageManager.PERMISSION_GRANTED;
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == granted) {
grantRequested =
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN) != granted;
if (grantRequested) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN}, RESULT_OK);
} else {
if (grantRequested) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(exit).setMessage(R.string.permitNotGranted);
alertDialogBuilder.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MainActivity.this.finish();
System.exit(0);
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
}
} else {
dialog.dismiss();
alertDialogBuilder.setTitle(exit).setMessage(R.string.permitNotGranted);
alertDialogBuilder.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MainActivity.this.finish();
System.exit(0);
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
});
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
boolean grantChecker = false;
if (grantResults.length > 0) {
grantChecker = true;
for (int i = 0; grantResults.length > i; i++) {
boolean a = grantResults[i] == PackageManager.PERMISSION_GRANTED;
grantChecker = grantChecker & a;
}
}
if (requestCode != RESULT_OK) {
int granted = PackageManager.PERMISSION_GRANTED;
if (!grantChecker & (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == granted)) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
ResumenFragment.errorMsg(permitHandling);
ActivityCompat.requestPermissions(this,
new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN}, RESULT_OK);
} else {
grantRequested =
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH) != granted |
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN) != granted;
if (grantRequested) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(exit).setMessage(R.string.permitNotGranted);
alertDialogBuilder.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MainActivity.this.finish();
System.exit(0);
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
;
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
if (resultCode == Activity.RESULT_OK) {
// The result data contains a URI for the document or directory that
// the user selected.
if (resultData != null) {
Uri uriData = resultData.getData();
// String fileId =DocumentsContract.getDocumentId(uriData);
if (requestCode == CREATE_FILE_L) {
Data.fileNameL = uriData;
}
if (requestCode == CREATE_FILE_H) {
Data.fileNameH = uriData;
}
if (requestCode == CREATE_FILE_R) {
Data.fileNameR = uriData;
}
if (requestCode == CREATE_FILE_T) {
Data.fileNameR = uriData;
}
if (requestCode == PICK_FILE_T) {
Data.fileNameT = uriData;
}
if (requestCode == PICK_FILE_L) {
Data.fileNameL = uriData;
}
if (requestCode == PICK_FILE_H) {
Data.fileNameH = uriData;
}
if (requestCode == PICK_FILE_R) {
Data.fileNameR = uriData;