使用“共享通过”屏幕将数据传递到活动

时间:2014-02-28 19:23:51

标签: android android-intent intentfilter

我正在尝试将数据传递给我的活动,但不幸的是我仍然没有成功。我想要完成的是在文件浏览器中选择一个文件,共享它并将数据传递给我的活动。

在我的清单中,我添加了一个意图过滤器:

<activity android:name=".MyActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="*/*"/>
    </intent-filter>            
</activity>

在我的Java文件中,我正在尝试获取数据:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myactivity);
    Intent intent = getIntent();
    Uri data = intent.getData();
    if (data != null) {
        // process the data
    } else {
        // no data received
    }
}

当我从“我的文件”中选择一个文件并共享它时,我的应用程序在列表中可见,当我点击它时会启动我的活动,但是intent.getData();始终返回null。 我错过了什么吗?感谢。

1 个答案:

答案 0 :(得分:0)

您可以从以下示例中获取数据:

使用带元素的元素。例如,要处理twitter.com的所有链接,您可以将其放入AndroidManifest.xml中:

<intent-filter>
    <data android:scheme="http" android:host="twitter.com"/>
    <action android:name="android.intent.action.VIEW" />
</intent-filter>

然后,当用户在浏览器中点击Twitter链接时,系统会询问他们使用哪个应用程序来完成操作:浏览器或您的应用程序。

当然,如果您想在您的网站和应用之间提供紧密集成,您可以定义自己的方案:

<intent-filter>
    <data android:scheme="my.special.scheme" />
    <action android:name="android.intent.action.VIEW" />
</intent-filter>

然后,在您的网络应用中,您可以添加以下链接:

<a href="my.special.scheme://other/parameters/here">

当用户点击它时,您的应用程序将自动启动(因为它可能是唯一可以处理my.special.scheme:// uris类型的应用程序)。唯一的缺点是如果用户没有安装应用程序,他们将得到一个讨厌的错误。而且我不确定有什么方法可以检查。

编辑:要回答您的问题,您可以使用getIntent()。getData()返回一个Uri对象。然后,您可以使用Uri。*方法提取所需的数据。例如,假设用户点击了http://twitter.com/status/1234的链接:

strong textUri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"

您可以在Activity中的任何位置执行上述操作,但您可能希望在onCreate()中执行此操作。您还可以使用params.size()来获取Uri中的enter code here个路径段的数量。查看javadoc或android开发人员网站,了解可用于提取特定部分的其他Uri方法。

Launch custom android application from android browser