我正在尝试将数据传递给我的活动,但不幸的是我仍然没有成功。我想要完成的是在文件浏览器中选择一个文件,共享它并将数据传递给我的活动。
在我的清单中,我添加了一个意图过滤器:
<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。 我错过了什么吗?感谢。
答案 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方法。