我试图获取Android设备的内部存储路径。
由于大多数设备迟到了使用Environment.getExternalStorageDirectory().getPath();
返回内部存储路径,所以我使用它来获取路径。
除了当我从非Activity类调用Environment.getExternalStorageDirectory().getPath();
时,它返回null,而如果我从Activity类调用它返回正确的路径。
我尝试搜索其他帖子但找不到任何有用的内容。
任何帮助都会非常感激。
编辑:
if(getExtSdCardPath(con)!=null)
{ path=getExtSdCardPath(con);
if(new File(path).getPath().equal(Environment.getExternalStorageDirectory().getPath())) // This line give null "Null Pointer exception"
{
return null;
}
return path;
}
我正在检查SD卡路径是否与Environment.getExternalStorageDirectory().getPath()
答案 0 :(得分:1)
理想情况下,getExtSdCardPath()
将是“幂等的”,这是一种花哨的说法,“无论你称它为多少次,都做同样的工作并返回同样的事情。”
在你的情况下,事实并非如此。第一次调用getExtSdCardPath()
会返回您想要的值,第二次调用getExtSdCardPath()
会返回null
。
在您的情况下,没有特别需要两次调用getExtSdCardPath()
,因此您可以通过重写代码来解决幂等问题:
path=getExtSdCardPath(con);
if(path!=null)
{
if(new File(path).getPath().equal(Environment.getExternalStorageDirectory().getPath())) // This line give null "Null Pointer exception"
{
return null;
}
return path;
}
答案 1 :(得分:0)
听起来您忘记将所请求的权限放入清单中OR / AND忘记在运行时请求此类权限(如果您在使用Android 6.0及更高版本的设备上运行此权限)。
尝试添加到您的清单:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这是一个快速简单的实现示例,说明如何在运行时请求权限:
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{
private static final int REQUEST_WRITE_PERMISSION = 111; //Number is not matter, just put what you want
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Do your stuff with the file
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermission();
}
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
} else {
//Do your stuff with the file
}
}
}