Файлы доступа к Android Studio

#java #android #android-studio

#java #Android #android-studio

Вопрос:

хотите открыть текстовые документы в виде текста в приложении для Android. Я работаю в Android Studio, используя Java. У меня установлены разрешения, разрешенные для запроса пользовательских разрешений, я много исследовал и не смог найти ничего большего, чем то, что у меня есть. Появляется сообщение об ошибке, что разрешение не предоставлено. Я использую Android 7 или выше. Пожалуйста, помогите!

Мой код в MainActivity:

 public class MainActivity extends AppCompatActivity {

    static ArrayList<String> notes = new ArrayList<>();
    static ArrayAdapter arrayAdapter;
    //for asking permission
    private final static int REQUEST_CODE_ASK_PERMISSIONS = 1;
    private static final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
            Manifest.permission.WRITE_EXTERNAL_STORAGE};

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.add_note_menu, menu);
        return super.onCreateOptionsMenu (menu);
    }
    // Storage Permissions
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

   public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
    }
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        super.onOptionsItemSelected(item);
        if (item.getItemId() == R.id.open_note){
            //get txt from file and send as text to textEditor action

            //pick the file
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                //intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(
                    Intent.createChooser(intent, "Choose a file"),
                    8778
            );

        }

        if (item.getItemId() == R.id.new_note){
        //New Note

            Intent intent = new Intent (getApplicationContext(), NoteEditorActivity.class);     
            startActivity(intent);
            return true;
        }
        return false;
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    //get the file path as string
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 8778 amp;amp; resultCode == Activity.RESULT_OK){
            checkPermissions();
            if (ContextCompat.checkSelfPermission(
                    MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) ==
                    PackageManager.PERMISSION_GRANTED) {

                //build the uri
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                verifyStoragePermissions(MainActivity.this);
                String baseDir = Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
              
                StringBuilder text = new StringBuilder();

                //request permission
                final int REQUEST_CODE_ASK_PERMISSIONS = 1;
                final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
                        Manifest.permission.WRITE_EXTERNAL_STORAGE};

                try {

                    BufferedReader br = new BufferedReader(new 
    FileReader(("/storage/emulated/0/download/paperclip.txt")));
                    new AlertDialog.Builder(MainActivity.this)
                            .setIcon(android.R.drawable.ic_dialog_alert).setTitle("File 
    Name").setMessage("YAY").show();
                    String line=br.readLine();

                    while (!((line).equals(null))) {
                        text.append(line);
                        text.append('n');
                        new AlertDialog.Builder(MainActivity.this)
                                .setIcon(android.R.drawable.ic_dialog_alert).setTitle("File 
   Name").setMessage(line   "great").show();
                    }
                    br.close();
                } catch (IOException e) {
                    new AlertDialog.Builder(MainActivity.this)
                            .setIcon(android.R.drawable.ic_dialog_alert).setTitle("File 
    Name").setMessage("In the catch!"   e).show();
                }
                String result = text.toString();
                new AlertDialog.Builder(MainActivity.this)
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .setTitle("File Info")
                        .setMessage(result   "result")
                        .show();
                // You can use the API that requires the permission.
                new AlertDialog.Builder(MainActivity.this)
                        .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("File 
Name").setMessage("GRANTED").show();
                //performAction(...);
            }

        }
    }

    protected void checkPermissions() {
        new AlertDialog.Builder(MainActivity.this)
                .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("File Name").setMessage("In 
 Check Permissions").show();
        final List<String> missingPermissions = new ArrayList<String>();
        // check all required dynamic permissions
        for (final String permission : REQUIRED_SDK_PERMISSIONS) {
            final int result = ContextCompat.checkSelfPermission(this, permission);
            if (result != PackageManager.PERMISSION_GRANTED) {
                missingPermissions.add(permission);
            }
        }
        if (!missingPermissions.isEmpty()) {
            // request all missing permissions

            final String[] permissions = missingPermissions
                    .toArray(new String[missingPermissions.size()]);
            ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_PERMISSIONS:
                for (int index = permissions.length - 1; index >= 0; --index) {
                    if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                        // exit the app if one permission is not granted
                        Toast.makeText(this, "Required permission '"   permissions[index]
                                  "' not granted, exiting", Toast.LENGTH_LONG).show();
                        finish();
                        return;
                    }

                }
                // all permissions were granted
        }
    }
    @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView) findViewById(R.id.listVeiw);

        SharedPreferences sharedPreferences = 
getApplicationContext().getSharedPreferences("com.example.notepadr", Context.MODE_PRIVATE);

        //Dealing with saving and stuff!!!!!
        HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("notes", null);

        if (set==null){

            notes.add("Example note");

        }else{
            notes = new ArrayList(set);
        }
        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);

        listView.setAdapter(arrayAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
                Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
                intent.putExtra("noteId", i);
                startActivity(intent);
            }
        });
  

Мой xml в activity_main.xml есть:

   <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteX="-16dp"
        tools:layout_editor_absoluteY="-69dp">

        <Button
            android:id="@ id/storage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Storage"
            android:layout_marginTop="16dp"
            android:padding="8dp"
            android:layout_centerHorizontal="true"/>

        <ListView
            android:id="@ id/listVeiw"
            android:layout_width="400dp"
            android:layout_height="732dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="false"
            android:layout_marginTop="3dp"
            android:layout_marginEnd="7dp"
            android:layout_marginBottom="-3dp"
            android:scrollbarSize="5dp"
            android:scrollbarStyle="outsideInset" />
    </RelativeLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
  

Код в AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.notepadr">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:requestLegacyExternalStorage="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.NotePadR">
        <activity android:name=".NoteEditorActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

       enter code here         <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

   </manifest>
  

Комментарии:

1. Пожалуйста, «Отредактируйте» свой пост: 1) Скопируйте / вставьте точный текст сообщения об ошибке, 2) Покажите, какая часть вашего кода вызывает ошибку

2. Смените тему. Речь идет не о Android Studio, которая не может получить доступ к файлам, а о вашем приложении для Android.