Приложение вылетает при чтении файлов из хранилища в noughat

Выпуск:

Код предназначен для выбора файла из внешнего хранилища для выполнения OTA-обновления из Android-приложения. Это хорошо работает в Kitkat, но когда дело доходит до телефонов Nougat (Moto G4) при выборе приложения Path, происходит сбой.

Я попытался отладки, проблема с этой строкой file = new File(item.getFilePath()); это создает NullPointerException в версии Nougat я также пытался дать разрешение в Manifest для чтения из внешнего хранилища, но проблема все еще остается. В чем может быть проблема? Я разместил код ниже. Пожалуйста, помогите

 public class ChooseImageFileDialog extends Activity {


       private FileListAdapter mAdaptor;
       private ArrayList<FileFolderItem> mFileFolderList;

        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mChooseButton = (Button) findViewById(R.id.select_button);
        mChooseButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mSelectedFile != null) {
                getIntent().putExtra(RETURN_PATH_RESULT, 
                    mSelectedFile.getPath());

                setResult(RESULT_OK, getIntent());
                finish();
            }
        }
    });

        mFileFolderList = new ArrayList<FileFolderItem>();
        mAdaptor = new FileListAdapter(this, mFileFolderList);
        mListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> listview, View view, int 
        position, long id) {
            FileFolderItem item = mFileFolderList.get(position);
            if (item == null)
                return;

            File file = new File(item.getFilePath());

            highlightSelectedItem(listview, view);
             }
        });

Модификация:27/11/2017

      mChooseButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mSelectedFile != null) {
                 if (Build.VERSION.SDK_INT >= 23) {
                    if (checkPermission()) {
                        Log.e("value", "Permission already Granted, Now you 
                     can save image.");
                     }
                    else {
                        requestPermission();
                    }
                }else {
                    Log.e("value", "Not required for requesting runtime 
                    permission");
                    getIntent().putExtra(RETURN_PATH_RESULT, 
                    mSelectedFile.getPath());
                    setResult(RESULT_OK, getIntent());
                    finish();
                }

            }
        }
    });


     private boolean checkPermission() {

       int result = 
             ActivityCompat.checkSelfPermission(ChooseImageFileDialog.this, 
                                Manifest.permission.WRITE_EXTERNAL_STORAGE);
         if (result == PackageManager.PERMISSION_GRANTED) {
             return true;
         }else{
             return false;
       }
    }


    private void requestPermission()
    {

       if(ActivityCompat.
          shouldShowRequestPermissionRationale(ChooseImageFileDialog.th
              is,Manifest.permission.WRITE_EXTERNAL_STORAGE)) 
          {
          Toast.makeText(ChooseImageFileDialog.this, "Write External Storage 
          permission allows us to do store images. Please allow this 
          permission in App Setting", Toast.LENGTH_LONG).show();
          } 
          else 
          {
          ActivityCompat.requestPermissions(ChooseImageFileDialog.this, new 
          String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
                                    PERMISSION_REQUEST_CODE);
          }

    }

Я изменил код, чтобы получить разрешения во время выполнения, но приложение по-прежнему не работает.

1 ответ

Вы должны запросить разрешение во время выполнения для устройств выше Android 5.1.

Так что вам нужно попросить WRITE_EXTERNAL_STORAGE разрешение:)

Прочитайте следующую документацию:

https://developer.android.com/training/permissions/requesting.html

Другие вопросы по тегам