【Android Training - 05】与其他Apps进行交互 [ Lesson 3 - 允许其他app启动你的activity ]
2012-12-03 16:24
751 查看
前两节课主要讲了从你的app启动另外一个app。但是如果你的app可以响应前面发出的action,那么你的app应该做好响应的准备。例如,如果你创建了一个social app,它可以分享messages 或者 photos 给好友,那么最好你的app能够接收
为了使得其他的app能够启动你的activity,你需要在你的manifest文件的
当你的app被安装到设备上时,系统可以识别你的intent filter并把这些信息记录下来。当其他app通过执行
intent时,系统可以自动查找出那些可以响应这个intent的activity。
为了尽可能确切的定义你的activity能够handle哪些intent,每一个intent filter都应该尽可能详尽的定义好action与data。
主要有下面三个方面需要定义:
Action一个想要执行的动作的名称。通常是系统已经定义好的值,例如
Note: 如果你不想handle
Category提供一个附加的方法来标识这个activity能够handle的intent。通常与用户的手势或者是启动位置有关。系统有支持几种不同的categories,但是大多数都不怎么用的到。而且,所有的implicit
intents都默认是
示例:
每一个发送出来的intent只会包含一个action与type,但是handle这个intent的activity的
如果任何的两对action与data是互相矛盾的,你应该创建不同的intent fliter来指定特定的action与type。
例如,假设你的activity可以handle 文本与图片,无论是
filter。因为
Note:为了接受implicit intents, 你必须在你的intent filter中包含
关于更多sending 与 receiving
sharing行为的,请查看 Receiving Content from Other Apps.【Android
Training - 06】分享数据内容 [Lesson 2 - 从其它app接收分享的内容]
为了决定采用哪个action,你可以读取Intent的内容。
你可以执行
如果你想返回一个result给启动你的那个activity,仅仅需要执行
code与result intent。当你的的操作成功之后,用户需要返回到原来的activity,通过执行
你必须总是指定一个result code。通常不是
Note: 默认的result code是
因此,如果用户在没有完成操作之前点击了back key,那么之前的activity接受到的result code就是"canceled"。
如果你只是纯粹想要返回一个int来表示某些返回的result数据之一,你可以设置result code为任何大于0的数值。如果你返回的result只是一个int,那么连intent都可以不需要返回了,如下:
Note: 我们没有必要在意你的activity是被用
学习自:http://developer.android.com/training/basics/intents/filters.html,欢迎交流!
转载请注明出自:http://blog.csdn.net/kesenhoo,谢谢!
ACTION_SEND的intent,这样当用户在其他app触发分享功能的时候,你的app能够出现在待选对话框。
为了使得其他的app能够启动你的activity,你需要在你的manifest文件的
<activity>标签下添加
<intent-filter>的属性。
当你的app被安装到设备上时,系统可以识别你的intent filter并把这些信息记录下来。当其他app通过执行
startActivity()或者
startActivityForResult()方法,并使用implicit
intent时,系统可以自动查找出那些可以响应这个intent的activity。
Add an Intent Filter [添加Intent Filter]
为了尽可能确切的定义你的activity能够handle哪些intent,每一个intent filter都应该尽可能详尽的定义好action与data。主要有下面三个方面需要定义:
Action一个想要执行的动作的名称。通常是系统已经定义好的值,例如
ACTION_SEND或者
ACTION_VIEW。DataIntent附带数据的描述。可以使用一个或者多个属性,你可以只定义MIME type或者是只指定URI prefix,也可以只定义一个URI scheme,或者是他们综合使用。
Note: 如果你不想handle
Uri类型的数据,那么你应该指定
android:mimeType属性。例如
text/plainor
image/jpeg.
Category提供一个附加的方法来标识这个activity能够handle的intent。通常与用户的手势或者是启动位置有关。系统有支持几种不同的categories,但是大多数都不怎么用的到。而且,所有的implicit
intents都默认是
CATEGORY_DEFAULT类型的。
示例:
<activity android:name="ShareActivity"> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> <data android:mimeType="image/*"/> </intent-filter> </activity>
每一个发送出来的intent只会包含一个action与type,但是handle这个intent的activity的
<intent-filter>是可以声明多个
<action>,
<category>与
<data>的。
如果任何的两对action与data是互相矛盾的,你应该创建不同的intent fliter来指定特定的action与type。
例如,假设你的activity可以handle 文本与图片,无论是
ACTION_SEND还是
ACTION_SENDTO的intent。在这种情况下,你必须为两个action定义两个不同的intent
filter。因为
ACTION_SENDTOintent 必须使用
Uri类型来指定接收者使用
send或
sendto的地址。例如:
<activity android:name="ShareActivity"> <!-- filter for sending text; accepts SENDTO action with sms URI schemes --> <intent-filter> <action android:name="android.intent.action.SENDTO"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="sms" /> <data android:scheme="smsto" /> </intent-filter> <!-- filter for sending text or images; accepts SEND action and text or image data --> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="image/*"/> <data android:mimeType="text/plain"/> </intent-filter> </activity>
Note:为了接受implicit intents, 你必须在你的intent filter中包含
CATEGORY_DEFAULT的category。
关于更多sending 与 receiving
ACTION_SENDintents来执行social
sharing行为的,请查看 Receiving Content from Other Apps.【Android
Training - 06】分享数据内容 [Lesson 2 - 从其它app接收分享的内容]
Handle the Intent in Your Activity [在你的Activity中Handle发送过来的Intent]
为了决定采用哪个action,你可以读取Intent的内容。你可以执行
getIntent()来获取启动你的activity的那个intent。你可以在activity生命周期的任何时候去执行这个方法,当是你最好是在
onCreate()或者
onStart()里面去执行。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get the intent that started this activity Intent intent = getIntent(); Uri data = intent.getData(); // Figure out what to do based on the intent type if (intent.getType().indexOf("image/") != -1) { // Handle intents with image data ... } else if (intent.getType().equals("text/plain")) { // Handle intents with text ... } }
Return a Result [返回Result]
如果你想返回一个result给启动你的那个activity,仅仅需要执行 setResult(),通过指定一个result
code与result intent。当你的的操作成功之后,用户需要返回到原来的activity,通过执行
finish()来关闭被叫起的activity。
// 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();
你必须总是指定一个result code。通常不是
RESULT_OK就是
RESULT_CANCELED。你可以通过
Intent来添加需要返回的数据。
Note: 默认的result code是
RESULT_CANCELED。.
因此,如果用户在没有完成操作之前点击了back key,那么之前的activity接受到的result code就是"canceled"。
如果你只是纯粹想要返回一个int来表示某些返回的result数据之一,你可以设置result code为任何大于0的数值。如果你返回的result只是一个int,那么连intent都可以不需要返回了,如下:
setResult(RESULT_COLOR_RED); finish();
Note: 我们没有必要在意你的activity是被用
startActivity()还是
startActivityForResult()方法所叫起的。系统会自动去判断改如何传递result。在不需要的result的case下,result会被自动忽略。
学习自:http://developer.android.com/training/basics/intents/filters.html,欢迎交流!
转载请注明出自:http://blog.csdn.net/kesenhoo,谢谢!
相关文章推荐
- 【Android Training - 05】与其他Apps进行交互 [ Lesson 1 - 启动到另外一个app ]
- 【Android Training - 05】与其他Apps进行交互 [ Lesson 2 - 从activity获取Result ]
- 【Android Training - 05】与其他Apps进行交互 [ Lesson 0 - 章节概览 ]
- Android Training - 和其他程序交互(3) - 允许其他程序启动你的activity
- 与其他Apps进行交互 [ Lesson 1 - 启动到另外一个app ]
- Android官方开发文档Training系列课程中文版:与其它APP交互之允许其它APP启动你的Activity
- 和其他App交互(3)允许其他App启动我们的Activity
- Android - 和其他APP交互 - 让其他app启动你的activity
- Google Android开发者文档系列-与其他应用程序交互之允许其他应用启动你的Activity
- android-Allowing Other Apps to Start Your Activity(App之间进行交互)
- Training--与其他APP通信(3)-- 允许其他应用启动你的Activity
- Android Training - 和其他程序交互(2) - 从一个activity取得结果
- 【Android Training - 15】云同步的实现 [Lesson 1 - 使用App Engine进行同步]
- Android培训翻译_允许其他应用程序启动你的Activity
- Android---允许其他应用程序启动你的Activity
- 【Android Training - 01】详解Activity生命周期 [ Lesson 1 - 启动与销毁Activity ]
- Activity通信 之 允许其他的APP启动你的Activity
- android学习(七) 允许其他应用启动您的Activity
- 【Android】如何启动调用其他app中的Activity
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]