Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中选择保存原始数据_Android_File_Exception_Permissions_Save - Fatal编程技术网

在Android中选择保存原始数据

在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

我试图在一个应用程序中保存一些数组,以便在其他平台(C++)中使用它们。我使用pick方法让用户选择文件名和目录,但首先我尝试像这样定义根目录,因为创建文档的处理需要Android 10在正确定义的目录中启动:

'''

'''

清单中的权限为:

'''

      <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;