从内部存储中获取共享preferences.xml文件的URI



我正在创建一个ACTION_SENDIntent,它发送有关设备/应用程序当前状态的不同信息

我在将共享偏好文件URI附加到该意向时遇到问题

Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setData(Uri.parse("mailto:"));
intent.setType("application/*");
intent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"support@example.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
intent.putExtra(Intent.EXTRA_TEXT, "Email body - Debug info");
// THE IMPORTANT PART
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,fileUriList);

其中fileUriList是包含的ArrayList<Uri>

  • 我从ContentProvider成功获得的SQLite数据库文件
  • 共享首选项文件URI-我无法获取该URI

提供商如何在清单中注册

<provider
android:name="._android._providers.MyFileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>

@xml/provider_paths:

<paths>
<cache-path name="cache_internal_storage" path="." />
<external-path name="external_files" path="."/>
</paths>

这就是我试图将URI获取到共享首选项文件的方式:

String spFilePath = getApplicationInfo().dataDir + "/shared_prefs/main_sp.xml";
File sharedPrefsMain = new File(spFilePath);
Uri spUri = MyFileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", sharedPrefsMain);

我收到以下错误消息:

未能找到包含/data/data/ro.example/shared_refs/main_sp.xml

如何从内部专用内存中正确获取共享的preference.xml文件

对于Android 10,将其添加到您的privilder_paths.xml文件中:

<root-path name="root" path="." />

否则,请将您的文件复制到getFilesDir((,然后使用进行共享

<files-path name="private" path="."/>

FileProvider不从任意位置提供服务,shared_prefs超出了它所支持的范围。您需要创建自己的ContentProvider来提供该文件。

最新更新