Android 从noughat中的存储路径读取文件时应用程序崩溃 问题:
该代码用于从外部存储器中选择文件进行OTA 从Android应用程序更新。这在Kitkat中运行良好,但当涉及到 牛轧糖手机(MotoG4)在选择Path应用程序时崩溃 我试过调试,问题是这一行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
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);
}
}