博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Allowing Other Apps to Start Your Activity
阅读量:4046 次
发布时间:2019-05-24

本文共 6338 字,大约阅读时间需要 21 分钟。

For instance, if you build a social app that can share messages or photos with the user's friends, it's in your best interest to support the intent so users can initiate a "share" action from another app and launch your app to perform the action.

To allow other apps to start your activity, you need to add an element in your manifest file for the corresponding element.

When your app is installed on a device, the system identifies your intent filters and adds the information to an internal catalog of intents supported by all installed apps. When an app calls or , with an implicit intent, the system finds which activity (or activities) can respond to the intent.

Add an Intent Filter

In order to properly define which intents your activity can handle, each intent filter you add should be as specific as possible in terms of the type of action and data the activity accepts.

The system may send a given to an activity if that activity has an intent filter fulfills the following criteria of the object:

Action
A string naming the action to perform. Usually one of the platform-defined values such as
or
.

Specify this in your intent filter with the element. The value you specify in this element must be the full string name for the action, instead of the API constant (see the examples below).

Data
A description of the data associated with the intent.

Specify this in your intent filter with the element. Using one or more attributes in this element, you can specify just the MIME type, just a URI prefix, just a URI scheme, or a combination of these and others that indicate the data type accepted.

Note: If you don't need to declare specifics about the data (such as when your activity handles to other kind of "extra" data, instead of a URI), you should specify only the android:mimeType attribute to declare the type of data your activity handles, such as text/plain or image/jpeg.

Category
Provides an additional way to characterize the activity handling the intent, usually related to the user gesture or location from which it's started. There are several different categories supported by the system, but most are rarely used. However, all implicit intents are defined with
by default.

Specify this in your intent filter with the element.

In your intent filter, you can declare which criteria your activity accepts by declaring each of them with corresponding XML elements nested in the element.

For example, here's an activity with an intent filter that handles the intent when the data type is either text or an image:

Each incoming intent specifies only one action and one data type, but it's OK to declare multiple instances of the , , and elements in each .

If any two pairs of action and data are mutually exclusive in their behaviors, you should create separate intent filters to specify which actions are acceptable when paired with which data types.

For example, suppose your activity handles both text and images for both the and intents. In this case, you must define two separate intent filters for the two actions because a intent must use the data to specify the recipient's address using the send or sendto URI scheme. For example:

Note: In order to receive implicit intents, you must include the category in the intent filter. The methods and treat all intents as if they contained the category. If you do not declare it, no implicit intents will resolve to your activity.

For more information about sending and receiving intents that perform social sharing behaviors, see the lesson about .

Handle the Intent in Your Activity

In order to decide what action to take in your activity, you can read the that was used to start it.

As your activity starts, call to retrieve the that started the activity. You can do so at any time during the lifecycle of the activity, but you should generally do so during early callbacks such as or .

For example:

@Overrideprotected 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

If you want to return a result to the activity that invoked yours, simply call to specify the result code and result . When your operation is done and the user should return to the original activity, call to close (and destroy) your activity. For example:

// Create intent to deliver some kind of result dataIntent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");setResult(Activity.RESULT_OK, result);finish();

You must always specify a result code with the result. Generally, it's either or . You can then provide additional data with an , as necessary.

Note: The result is set to by default. So, if the user presses the Back button before completing the action and before you set the result, the original activity receives the "canceled" result.

If you simply need to return an integer that indicates one of several result options, you can set the result code to any value higher than 0. If you use the result code to deliver an integer and you have no need to include the , you can call and pass only a result code. For example:

setResult(RESULT_COLOR_RED);finish();

In this case, there might be only a handful of possible results, so the result code is a locally defined integer (greater than 0). This works well when you're returning a result to an activity in your own app, because the activity that receives the result can reference the public constant to determine the value of the result code.

Note: There's no need to check whether your activity was started with or . Simply call if the intent that started your activity might expect a result. If the originating activity had called , then the system delivers it the result you supply to ; otherwise, the result is ignored.

转载地址:http://vxgdi.baihongyu.com/

你可能感兴趣的文章
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>