我设计了一个Activity( MainActivity.java ),它可以在点击 CaptureButton 时捕获图像,并在点击 ShowFilesButton >时将所有捕获的图像显示在其上strong>以ListView的形式。 但我的应用程序在Emulator / Android设备上运行时遇到了崩溃,因为我收到了如LogCat中所示的以下RunTimeError。
错误Logcat的屏幕截图
android.support.v4.content.FileProvider 也出现在我的Eclipse中
AndroidManifest文件中的提供者代码 - 我不确定权限属性中提供的值。
<provider
android:name="android.support.v4.content.FileProvider"
android:exported="false"
android:authorities="com.example.showinfo.fileprovider"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
@ XML / file_paths
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path android:path="images/" android:name="myimages" />
</paths>
com.example.showinfo.MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listfiles=(ListView)findViewById(R.id.listfiles);
capturebutton=(Button)findViewById(R.id.captureimage);
showfilesbutton=(Button)findViewById(R.id.showfiles);
setContentView(R.layout.activity_main);
capturebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(intent.resolveActivity(getPackageManager())!=null)
{
startActivityForResult(intent,RCODE);
}
}
});
showfilesbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
File rootfolder= getFilesDir();
File folder=new File(rootfolder, "images");
File[] files=folder.listFiles();
String[] filenames={};
for(int i=0;i<files.length;i++)
filenames[i]=files[i].getAbsolutePath();
ArrayAdapter<String> a=new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,filenames);
listfiles.setAdapter(a);
//Uri contentUri=FileProvider.getUriForFile(getApplicationContext(), "com.example.showinfo.fileprovider", files[0].getAbsoluteFile());
}
});
}
答案 0 :(得分:0)
权限只是一个标识文件提供程序的String。
将android:authorities属性设置为基于a的URI权限 您控制的域名;例如,如果您控制域 mydomain.com你应该使用权限com.mydomain.fileprovider。
在AndroidManifest.xml中,按FileProvider:
将android:exported属性设置为false; FileProvider没有 需要公开。
您的file_paths.xml应如下所示(您不需要XML属性名称或属性前面的 android:):
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path path="images/" name="myimages" />
</paths>
在您的MainActivity.java中 - 这应该在startActivityForResult(intent,RCODE);
之前:
Uri uri = FileProvider.getUriForFile(this, "com.example.showinfo.fileprovider", yourDirectoryOfFiles);
intent.setData(uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
你的帖子比较陈旧。希望你能解决问题...但也许这会帮助其他人。 :)