如果共享本地可用文件,我希望我的应用只显示在共享菜单中。
目前它看似跟随,但无论是来自内部内容提供商还是共享文件系统上真实文件的路径,无论何时共享图像,都会显示我的应用程序。
<activity
android:name=".activities.ViewerActivity"
android:label="@string/app_name_sharing_to_display"
android:theme="@style/AppThemeFullScreen"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*"/>
</intent-filter>
</activity>
我正在收到如下的本地路径,我将它们保存在历史记录中,我不想要也不需要其他文件。
private String getRealPathFromURI(Uri contentURI)
{
String result = null;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null)
{
result = contentURI.getPath();
}
else
{
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
if (idx >= 0)
result = cursor.getString(idx);
cursor.close();
}
return result;
}
答案 0 :(得分:0)
getRealPathFromURI()
即使对于&#34;本地文件&#34;也是行不通的。在> 5亿台设备上运行Android 4.4及更高版本。
首先,您可能无法获得Uri
的{{1}}值,因为还有其他适用于Android的MediaStore
实施(例如Google Drive,Dropbox),其内容不一定在ACTION_GET_CONTENT
。
其次,MediaStore
不必支持MediaStore
列作为保留一些本地文件系统路径。
第三,如果文件位于可移动存储上,则该文件可能仍然无法访问,而您无法访问该文件。如果您不想使用DATA
支持content://
Uri
值,那么您的应用对许多人都没用。
话虽如此,欢迎您添加ContentResolver
元素,以限制<data>
仅限<intent-filter>
个计划。