共享菜单中的应用程序的意图过滤器 - 仅显示是否共享LOCAL文件

时间:2015-06-12 15:39:09

标签: android android-activity share intentfilter

如果共享本地可用文件,我希望我的应用只显示在共享菜单中。

目前它看似跟随,但无论是来自内部内容提供商还是共享文件系统上真实文件的路径,无论何时共享图像,都会显示我的应用程序。

 <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;
}

1 个答案:

答案 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>个计划。