Android Intent是Android系统中的一个重要概念,它是一种消息传递机制,可以在不同的应用程序之间传递数据和信息。Intent可以用来启动Activity、Service、BroadcastReceiver,也可以用来传递数据和信息。
Intent有两种形式:显式Intent和隐式Intent。显式Intent是直接向特定的Activity或者Service发出请求;而隐式Intent则是根据Action和Category来匹配对应的Activity或者Service。
// 显式 Intent 代码示例 Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent);
// 隐式 Intent 代码示例 Intent intent = new Intent("com.example.action.TEST"); intent.addCategory("android.intent.category.DEFAULT"); startActivity(intent);
此外,Android还允许使用Bundle对象将数据传递到目标Activity或者Service中,Bundle对象可以存储多个键值对,并且可以存储多种不同的数据类型。
// Bundle 存储数据代码示例 Bundle bundle = new Bundle(); // 创建 Bundle 对象 bundle.putString("name", "Tom"); // 存储 String 类型数据 bundle.putBoolean("isMale", true); // 存储 Boolean 类型数据 Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 创建 Intent 对象 intent.putExtras(bundle); // 把 Bundle 数据存入 Intent 对象中 startActivity(intent); // 跳转 Activity
总之,Android中的Intent是一个重要的机制,它能够帮助我们在不同应用之间传递信息、启动新的应用、传递数据。使用正确的方法来使用它能够带来很大的好处。
intent是具有其相关联数据的动作。
Android使用Intents调用组件。Android中的组件包括
你可以使用intent来调用外部应用程序或内部组件。
你可以使用intent来引发事件,使别人可以以类似于发布-订阅模型的方式进行响应。
你可以使用intent引发警报。
以下代码显示了如何使用Intent打开一个Activity。
假设你进行了以下活动:
public class BasicViewActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... } }
然后,你在清单文件中注册这个activity,使其可供其他应用程序调用。
<activity android:name=".BasicViewActivity" android:label="Basic View Tests"> <intent-filter> <action android:name="cn..intent.action.ShowBasicView"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
要使用intent调用此BasicViewActivity:
public static void invokeMyApplication(Activity parentActivity) { String actionName= "cn..intent.action.ShowBasicView"; Intent intent = new Intent(actionName); parentActivity.startActivity(intent); }
动作名称的一般约定是
<your-package-name>.intent.action.YOUR_ACTION_NAME
BasicViewActivity可以获取调用它的intent。
class BasicViewActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... ... Intent intent = this.getIntent(); if (intent == null) { Log.d("test tag", "This activity is invoked without an intent"); } } }
intent有四个部分:
在Android中,intent通常是成对的:动作和数据。
该动作描述了要执行什么,例如编辑项目,查看项目的内容等等。
数据指定受影响的内容,例如联系人数据库中的人员。
数据被指定为Uri对象。
一些行动的例子如下:
数据的一些示例包括以下:
动作和数据对描述了要执行的操作。
例如,要拨打电话号码,你将使用对 ACTION_DIAL/tel:+999234567
。
要显示存储在手机中的联系人列表,请使用对ACTION_VIEW/content://contacts
。
要从联系人列表中选择联系人,请使用对ACTION_PICK/content://contacts
。
你可以使用intent过滤器中的< category>
元素将activity分组。
AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn..Intents" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".IntentsActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MyBrowserActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="cn..MyBrowser" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="cn..Apps" /> <data android:scheme="http" /> </intent-filter> </activity> </application> </manifest>
以下代码将直接调用MyBrowerActivity:
Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse ("http://www..cn")); i.addCategory("cn..Apps"); startActivity(Intent.createChooser(i, "Open URL using..."));
如果省略 addCategory()
语句,上述代码仍然会调用MyBrowerActivity,因为它仍然匹配默认类别 android.intent.category.DEFAULT
。
对于以下代码,它不匹配在intent过滤器中定义的类别,因此不会启动任何activity。
以下代码引用类别cn..OtherApps,它不匹配intent过滤器中的任何类别,因此如果不使用intent类的createChoose()方法,将会引发运行时异常。
Intent i = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse ("http://www..cn")); //i.addCategory("cn..Apps"); //this category does not match any in the intent-filter i.addCategory("cn..OtherApps"); startActivity(Intent.createChooser(i, "Open URL using..."));
Spark SQLJSON数据集Spark SQL能够自动推断JSON数据集的模式,加载它为一个SchemaRDD。这种转换可以通过下面两种方法来实现jsonF...
Spark GraphXPregel API图本身是递归数据结构,顶点的属性依赖于它们邻居的属性,这些邻居的属性又依赖于自己邻居的属性。所以许...
准备开始准备开始在本章,我们要创建一个 Storm 工程和我们的第一个 Storm 拓扑结构。NOTE: 下面假设你的 JRE 版本在 1.6 以上。...
在Neo4j CQL中,我们不能单独使用MATCH或RETURN命令,因此我们应该结合这两个命令从数据库检索数据。 例如:本示例演示如何使用...
有时基于我们的客户端要求,我们需要向现有节点或关系添加或删除属性。 我们使用Neo4j CQL SET子句向现有节点或关系添加新属性。...
Neo4j使用CQL MERGE命令 - 创建节点,关系和属性为从数据库检索数据 MERGE命令是CREATE命令和MATCH命令的组合。 MERGE = CREATE ...
SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可...