Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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 从noughat中的存储路径读取文件时应用程序崩溃 问题:_Android_Android Permissions_Android File_Android 7.0 Nougat_Android Storage - Fatal编程技术网

Android 从noughat中的存储路径读取文件时应用程序崩溃 问题:

Android 从noughat中的存储路径读取文件时应用程序崩溃 问题:,android,android-permissions,android-file,android-7.0-nougat,android-storage,Android,Android Permissions,Android File,Android 7.0 Nougat,Android Storage,该代码用于从外部存储器中选择文件进行OTA 从Android应用程序更新。这在Kitkat中运行良好,但当涉及到 牛轧糖手机(MotoG4)在选择Path应用程序时崩溃 我试过调试,问题是这一行file=newfile(item.getFilePath())这会在牛轧糖版本中创建NullPointerException,我也尝试在清单中授予读取外部存储的权限,但问题仍然存在。可能是什么问题?我已经在下面发布了代码。请帮助 public class ChooseImageFileDialog e

该代码用于从外部存储器中选择文件进行OTA 从Android应用程序更新。这在Kitkat中运行良好,但当涉及到 牛轧糖手机(MotoG4)在选择Path应用程序时崩溃

我试过调试,问题是这一行
file=newfile(item.getFilePath())这会在牛轧糖版本中创建
NullPointerException
,我也尝试在清单中授予读取外部存储的权限,但问题仍然存在。可能是什么问题?我已经在下面发布了代码。请帮助

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

我修改了代码以获得运行时权限,但仍然
应用程序正在崩溃。仍然存在相同的问题

对于Android 5.1以上的设备,您必须在运行时请求权限

因此,您需要请求
写入外部存储
权限:)

阅读以下文档:


对于Android 5.1以上的设备,您必须在运行时请求权限

因此,您需要请求
写入外部存储
权限:)

阅读以下文档:



您应该从Android 5.1开始检查运行时权限。你检查/启用运行时权限了吗?没有,我只是尝试了静态权限。我会尝试。我把答案放在下面:)是的。是的。我看到了。谢谢。我有授予运行时存储权限的示例代码,请发布。你应该从Android 5.1开始检查运行时权限。你检查/启用运行时权限了吗?没有,我只是尝试了静态权限。我会尝试。我把答案放在下面:)是的。是的。我看到了。谢谢。我有授予运行时存储权限的示例代码,请发布。他需要请求android 6.0以上的权限。要获得运行时权限,目标SDK应该是23 ryt?在我的例子中,min Target SDk是18,因此ContextCompat.checkSelfPermission()将不起作用。您可以使用自己的上下文,即Android 5.1以上的context.checkSelfPermission
安卓6.0,对吗。5.2号已经在上面了。你这样说话让人很困惑,也没说到点子上。@diegoveloper没听懂你的话?请解释更多!他需要请求android 6.0以上的权限。对于运行时权限,目标SDK应该是23 ryt?在我的例子中,min Target SDk是18,因此ContextCompat.checkSelfPermission()将不起作用。您可以使用自己的上下文,即Android 5.1以上的context.checkSelfPermission
安卓6.0,对吗。5.2号已经在上面了。你这样说话让人很困惑,也没说到点子上。@diegoveloper没听懂你的话?请解释更多!
      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);
          }

    }