这是Training for Android developers
的示例代码cat partitions.txt | while read line
do
part=$line
su - demo -c "touch $part"
fi
done
当我们从子活动返回结果时,通常我们只需要设置Extra或Uri数据。在此处指定自定义操作的目的是什么? 更新:
假设我们要打开图库应用以选择要在我们的应用中使用的图片。
调用图库应用
//Create intent to deliver some kind of result data
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"));
setResult(Activity.RESULT_OK, result);
finish();
返回结果
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent,PICK_IMAGE_REQUEST);
处理结果
Intent result = new Intent();
result.setData(_Uri.parse("content://result_uri");
setResult(Activity.RESULT_OK, result);
finish();
我没有设置" com.example.RESULT_ACTION"在上面的示例代码中。
答案 0 :(得分:3)
当您致电startActivityForResutl
时,意味着您希望第二个/次级活动得到回复,并且当用户返回上一个活动时会触发onActivityResult
。
onActivityResult
有3个参数,其中一个是intent
,如果第二个/子活动尚未调用setResult
函数,那么您将收到intent
as上一个活动中的null
如果您不打电话给result
功能,setResult
意图永远不会传递给您之前的活动
第一项活动
Intent intent = new (..., secondActivity);
..
startActivityForResult(intent,1);
第二项活动
....
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"));
//setResult(Activity.RESULT_OK, result); this is not there
finish();
第一项活动
... OnActivityResult(int response, int request, Intent data)
// ^^^ will be null because
// setResult was not called in second activity so to get data intent
// you have to call setResult
注意:如果您不想要任何结果,请使用startActivity
代替startActivityForResult
,并且无需拨打setResult
第二个活动和OnActivityResult
功能将不会被触发
更新:
Intent result = new Intent("com.example.RESULT_ACTION",
Uri.parse("content://result_uri"));
com.example.RESULT_ACTION
:表示执行的操作类型是什么,在这种情况下是结果操作
它类似于action
intent-filter
字段
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
^^^
</intent-filter>
</activity>
这样您就可以验证执行的操作类型,例如您可以执行的活动结果
if(data.getAction().equals("com.example.RESULT_ACTION"))
{ // do this}
else if(data.getAction().equals("android.intent.action.SEND"") {
// do something here}
显然可以使用请求和响应代码完成,但是当两个应用程序之间的数据或操作发生而不是两个活动时,这很有用
content://result_uri
在文档中只是一个例子,但这意味着,数据类型意味着与意图相关的数据的详细信息
例如:如果您想使用意图打开图像,并在系统上安装应用程序,则使用
intent.setDataAndType(Uri.parse("file://" + "/sdcard/test.jpg"), "image/*");
其中image/*
描述了作为图像的文件类型
例如getData为您提供意图正在处理的数据/文件资源,意味着它提供URI,可以进一步用于验证数据类型。
因此,当在两个应用之间进行通信但在同一个应用中使用startActivityForResult
时,这非常有用,那么您只需使用请求和响应代码识别结果类型
答案 1 :(得分:0)
希望这会对你有所帮助:
意图用于向Android系统发出已发生特定事件的信号。意图通常描述应该执行的操作,并提供应该执行此类操作的数据。例如,您的应用程序可以通过intent为某个URL启动浏览器组件。以下示例说明了这一点。
String url = "http://www.vogella.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
但Android系统如何识别可以对特定意图作出反应的组件?
组件可以通过意图过滤器为特定操作和特定数据注册自己。意图过滤器通过声明组件的功能来指定活动,服务或广播接收器可以响应的意图类型。
Android组件在AndroidManifest.xml中静态注册意图过滤器,或者在广播接收器的情况下也通过代码动态注册意图过滤器。意图过滤器由其类别,操作和数据过滤器定义。它还可以包含其他元数据。
如果将意图发送到Android系统,则Android平台会运行接收方确定。它使用意图中包含的数据。如果多个组件已注册相同的intent过滤器,则用户可以决定应该启动哪个组件。
答案 2 :(得分:0)
每个传入意图仅指定一个操作和一个数据类型,但是 可以声明
中的<action>
,<category>
和。{的多个实例 每个<data>
<intent-filter>.
个元素
它表示您将结果发送到活动或子活动的任何活动或子活动,它需要再次为您发送结果的活动定义Intent
的操作,因为它为<intent-filter>
。
Intent
所以它更像是<intent-filter>
安全方法。