Android中Intent和IntentFilter进行通信

article/2025/10/30 10:53:23

文章目录

  • Intent启动不同组件的方法
    • Activity
    • Service
    • BroadcastReceiver
  • Data,Type属性与intent-filter配置
  • 指定Action调用系统的Activity
    • 启动Activity的标准Action常量以及对应的字符串
    • 标准的Category常量以及对应的字符串
  • 实例一查看并获取联系人电话
    • MainActivity代码:
  • 实例二:返回系统界面
  • 实例三:Data属性配置。
    • MainActivity代码:
    • AndroidManifest.xml代码:
  • 实例四:使用Action,Data属性启动系统Activity
    • MainActivity代码:
  • 总结:

后天就是2017了,提前祝大家新年快乐!最近忙得头晕头转向的,难得有天轻松日!正好能给我时间写篇博文,整理下知识!

首先,必须提出的是,概念性的东西在这里就不手打了,如什么是Intent,Intent如何使用!这里最好查看官方文档,说得比我说的详细的多,而且更加全面。

文章目录

  • Intent启动不同组件的方法
    • Activity
    • Service
    • BroadcastReceiver
  • Data,Type属性与intent-filter配置
  • 指定Action调用系统的Activity
    • 启动Activity的标准Action常量以及对应的字符串
    • 标准的Category常量以及对应的字符串
  • 实例一查看并获取联系人电话
    • MainActivity代码:
  • 实例二:返回系统界面
  • 实例三:Data属性配置。
    • MainActivity代码:
    • AndroidManifest.xml代码:
  • 实例四:使用Action,Data属性启动系统Activity
    • MainActivity代码:
  • 总结:

实例一: 指定Action调用系统的Activity
这里写图片描述
实例三:Data属性配置
这里写图片描述
实例四:使用Action,Data属性启动系统Activity
这里写图片描述

Intent启动不同组件的方法

Activity

  1. startActivity(Intent intent);

  2. startActivityForResult(Intent intent,int requestCode);

Service

  1. componentName startService(Intent service);
  2. boolean bindService(Intent service,ServiceConnection conn, int flags);

BroadcastReceiver

  1. sendBroadcast(Intent intent);
  2. sendBroadcast(Intent intent,String receiverPermission)
  3. sendOrderedBroadcast(Intent intent,String receiverPermission,BroadcastReceiver resultReceiver,Handler scheduler,int initialCode,String initialData,Bundle unutialExtras);
  4. sendOrderedBroadcast(Intent intent,String receiverPermission)
  5. sendStickyBroadcast(Intent intent);
  6. sendStickyBroadcast(Intent intent,BroadcastReceiver resultReceiver,Handler scheduler,int initialCode,String initialData,Bundle unutialExtras)

Data,Type属性与intent-filter配置

  1. Data通常用于给Action提供操作的数据,接受一个Uri对象。
    Data的通常格式:content://com.android.contacts/contacts/1
    Uri总满足如下格式:scheme://host:post/path
  2. Type属性用于指定该Data属性所指定的Uri对应的MIME类型,可以为任何类型,只要符合abc/xyz格式的字符串即可。

**注意:这两个属性会相互覆盖,如果希望Intent同时拥有的话,必须待用Intent的setDataAndType()方法. **

指定Action调用系统的Activity

启动Activity的标准Action常量以及对应的字符串

这里写图片描述

标准的Category常量以及对应的字符串

这里写图片描述

实例一查看并获取联系人电话

MainActivity代码:

public class MainActivity extends Activity
{final int PICK_CONTACT = 0;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bn = (Button) findViewById(R.id.bn);// 为bn按钮绑定事件监听器bn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){// 创建IntentIntent intent = new Intent();// 设置Intent的Action属性intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent的Type属性intent.setType("vnd.android.cursor.item/phone");// 启动Activity,并希望获取该Activity的结果startActivityForResult(intent, PICK_CONTACT);}});}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data){super.onActivityResult(requestCode, resultCode, data);switch (requestCode){case (PICK_CONTACT):if (resultCode == Activity.RESULT_OK){// 获取返回的数据Uri contactData = data.getData();CursorLoader cursorLoader = new CursorLoader(this, contactData, null, null, null, null);// 查询联系人信息Cursor cursor = cursorLoader.loadInBackground();// 如果查询到指定的联系人if (cursor.moveToFirst()){String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));// 获取联系人的名字String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));String phoneNumber = "此联系人暂未输入电话号码";//根据联系人查询该联系人的详细信息Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone. 												CONTACT_ID+ " = " + contactId, null, null);if (phones.moveToFirst()){//取出电话号码phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));}// 关闭游标phones.close();EditText show =(EditText)findViewById(R.id.show);show.setVisibility(View.VISIBLE);//显示联系人的名称show.setText(name);EditText phone =(EditText)findViewById(R.id.phone);phone.setVisibility(View.VISIBLE);//显示联系人的电话号码phone.setText(phoneNumber);}// 关闭游标cursor.close();}break;}}
}

实例二:返回系统界面

// 创建Intent对象Intent intent = new Intent();// 为Intent设置Action、Category属性intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);

实例三:Data属性配置。

注意观察:

  1. 如果目标组件<data…/>子元素只指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同,即可启动该组件!
  2. 如果目标组件<data…/>子元素只指定了android:scheme,android:host属性,那么只要Intent的Data属性的scheme,host部分与android:scheme,android:host属性相同,即可启动该组件!
  3. 如果目标组件<data…/>子元素只指定了android:scheme,android:host,android:port属性,那么只要Intent的Data属性的scheme,host,port部分与android:scheme,android:host,android:port属性相同,即可启动该组件!

MainActivity代码:

public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);}public void scheme(View source){Intent intent = new Intent();// 只设置Intent的Data属性intent.setData(Uri.parse("lee://www.aserbao.org:1234/test"));startActivity(intent);}public void schemeHostPort(View source){Intent intent = new Intent();// 只设置Intent的Data属性intent.setData(Uri.parse("lee://www.imerbao.org:8888/test"));startActivity(intent);}public void schemeHostPath(View source){Intent intent = new Intent();// 只设置Intent的Data属性intent.setData(Uri.parse("lee://www.imerbao.org:1234/mypath"));startActivity(intent);}public void schemeHostPortPath(View source){Intent intent = new Intent();// 只设置Intent的Data属性intent.setData(Uri.parse("lee://www.imerbao.org:8888/mypath"));startActivity(intent);}public void schemeHostPortPathType(View source){Intent intent = new Intent();// 同时设置Intent的Data、Type属性intent.setDataAndType(Uri.parse("lee://www.imerbao.org:8888/mypath"), "abc/xyz");startActivity(intent);}
}

AndroidManifest.xml代码:

    <applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:icon="@drawable/ic_scheme"android:name=".SchemeActivity"android:label="指定scheme的Activity"><intent-filter><action android:name="xx" /><category android:name="android.intent.category.DEFAULT" /><!-- 只要Intent的Data属性的scheme是lee,即可启动该Activity --><data android:scheme="lee" /></intent-filter></activity><activityandroid:icon="@drawable/ic_host"android:name=".SchemeHostPortActivity"android:label="指定scheme、host、port的Activity"><intent-filter><action android:name="xx" /><category android:name="android.intent.category.DEFAULT" /><!-- 只要Intent的Data属性的scheme是lee,且host是www.imerbao.orgport是8888即可启动该Activity --><data android:scheme="lee"android:host="www.imerbao.org"android:port="8888" /></intent-filter></activity><activityandroid:icon="@drawable/ic_sp"android:name=".SchemeHostPathActivity"android:label="指定scheme、host、path的Activity"><intent-filter><action android:name="xx" /><category android:name="android.intent.category.DEFAULT" /><!-- 只要Intent的Data属性的scheme是lee,且host是www.imerbao.orgpath是/mypath,即可启动该Activity --><data android:scheme="lee"android:host="www.imerbao.org"android:path="/mypath" /></intent-filter></activity><activityandroid:icon="@drawable/ic_path"android:name=".SchemeHostPortPathActivity"android:label="指定scheme、host、port、path的Activity"><intent-filter><action android:name="xx" /><category android:name="android.intent.category.DEFAULT" /><!-- 需要Intent的Data属性的scheme是lee,且host是www.imerbao.orgport是8888,且path是/mypath,才可启动该Activity --><data android:scheme="lee"android:host="www.imerbao.org"android:port="8888"android:path="/mypath"/></intent-filter></activity><activityandroid:icon="@drawable/ic_type"android:name=".SchemeHostPortPathTypeActivity"android:label="指定scheme、host、port、path、type的Activity"><intent-filter><action android:name="xx"/><category android:name="android.intent.category.DEFAULT" /><!-- 需要Intent的Data属性的scheme是lee,且host是www.imerbao.orgport是8888,且path是/mypath且type是abc/xyz,才可启动该Activity --><data android:scheme="lee"android:host="www.imerbao.org"android:port="8888"android:path="/mypath"android:mimeType="abc/xyz"/></intent-filter></activity></application>

实例四:使用Action,Data属性启动系统Activity

MainActivity代码:

public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bn = (Button) findViewById(R.id.bn);// 为bn按钮添加一个监听器bn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// 创建IntentIntent intent = new Intent();String data = "http://blog.csdn.net/qq_32175491";// 根据指定字符串解析出Uri对象Uri uri = Uri.parse(data);// 为Intent设置Action属性intent.setAction(Intent.ACTION_VIEW);// 设置Data属性intent.setData(uri);startActivity(intent);}});Button edit = (Button) findViewById(R.id.edit);// 为edit按钮添加一个监听器edit.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// 创建IntentIntent intent = new Intent();// 为Intent设置Action属性(动作为:编辑)intent.setAction(Intent.ACTION_EDIT);String data = "content://com.android.contacts/contacts/1";// 根据指定字符串解析出Uri对象Uri uri = Uri.parse(data);// 设置Data属性intent.setData(uri);startActivity(intent);}});Button call = (Button) findViewById(R.id.call);// 为call按钮添加一个监听器call.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// 创建IntentIntent intent = new Intent();// 为Intent设置Action属性(动作为:拨号)intent.setAction(Intent.ACTION_DIAL);String data = "tel:12345678911";// 根据指定字符串解析出Uri对象Uri uri = Uri.parse(data);// 设置Data属性intent.setData(uri);startActivity(intent);}});}

总结:

本文主要介绍了Android系统中Intent的功能和用法,当Android应用需要启动某个组件是,总需要借助Intent来实现。不管启动Activity还是Service,BroadcastReceiver组件,Android系统都是通过Intent来实现的。这里讲得知识一些基础的使用方法,如果要深挖,建议研究下底层代码!还是那句话,官方文档很重要!

近段时间一直在研究如何写好博文,给今后的自己一些回顾以及希望能给正在学习Android路上的初学者一些帮助!如果有什么问题欢迎给我留言,看到及时回复!

今天都已经31号了,文章准备了两天!洗洗准备睡了,基础知识点差不多都有写到。明天起床再修改下,准备发布了!


http://chatgpt.dhexx.cn/article/IXZ5N1Ki.shtml

相关文章

三、Intent 和 Intent过滤器(IntentFilter)

Intent&#xff08;意图&#xff09;&#xff1a; Intent 是一个消息传递对象&#xff0c;是我们要执行操作的一个抽象描述。我们可以使用它在相应的组件中传递消息和请求。下面是它的主要使用场景&#xff1a; 1. 启动Activity 通过 startActivity() 或者 startActivityForRes…

【Android】Intent 和 Intent Filter

一. Intent 简介 Intent 是一个消息传递对象&#xff0c;您可以用来从其他应用组件请求操作。可以用于&#xff1a;启动 Activity、启动服务、传递广播。 https://developer.android.com/guide/components/intents-filtershttps://developer.android.com/guide/components/i…

Android开发——IntentFilter的匹配规则

1. IntentFilter中的过滤信息 启动Activity分为显式调用和隐式调用&#xff0c;前者没什么好讲的&#xff0c;后者需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。包括action、category、data。 一个Activity中可以有多个IntentFilter&#xff0c;一个Intent…

Android中的Intent和Intent-filter总结

一&#xff0e;相关概念 &#xff08;一&#xff09;基本概念 Intent中文意思指”意图”,按照Android的设计理念,Android使用Intent来封装程序的”调用意图”,不管启动Activity、Service、BroadcastReceiver,Android都使用统一的Intent对象来封装这一”启动意图”。此外,Inten…

【intent-filter】AndroidManifest中<intent-filter>标签的 部分作用

这里写自定义目录标题 AndroidManifest.xmlIntent-filter 标签Intent-filter 标签中的常用元素Intent-filter 标签的作用Intent对象Intent显式启动活动窗口Intent隐式启动&#xff08;重要&#xff09; AndroidManifest.xml AndroidManifest.xml是安卓开发中主配置文件&#x…

IntentFilter功能简介

1.什么是IntentFilter &#xff1f; IntentFilter翻译成中文就是“意图过滤器”&#xff0c;主要用来过滤隐式意图。当用户进行一项操作的时候&#xff0c;Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件&#xff0c;服务。 例如&#xff1a;当用户点击…

简述 IntentFilter(意图过滤器)

转载自&#xff1a;http://www.cnblogs.com/ywtk/p/4158103.html 侵删 1.什么是IntentFilter &#xff1f; IntentFilter翻译成中文就是“意图过滤器”&#xff0c;主要用来过滤隐式意图。当用户进行一项操作的时候&#xff0c;Android系统会根据配置的 “意图过滤器” 来寻找可…

IntentFilter详解

IntentFilter的意思就是意图过滤器&#xff0c;当我们隐式的启动系统组件的时候&#xff0c;就会根据IntentFilter来筛选出合适的进行启动。 如果组件的 IntentFilter 与 Intent 中的 IntentFilter 正好匹配&#xff0c;系统就会启动该组件&#xff0c;并把 Intent 传递给它。如…

WPF MessageBox简单用法

1、弹出小框 用法&#xff1a; if (MessageBox.Show("内容", "标题", MessageBoxButton.YesNo, MessageBoxImage.Information) MessageBoxResult.Yes){label1.Content "yes";}else{label1.Content "no";} 2、例子 if (MessageBo…

C# winform 中MessageBox用法大全(附效果图)

我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下&#xff1a; 1.MessageBox.Show(“Hello~~~~”); 最简单的&#xff0c;只显示提示信息。 2.MessageBox.Show(“There are something wrong!”,“ERROR”); 可以给消息框加上…

MessageBox使用详解

Messagebox是我们编写程序时都会用到的东西&#xff0c;我每次使用的时候都能让它显示出来&#xff0c;但是我并不了解它的结构&#xff0c;或者说语法&#xff0c;下面简单总结一下。 语法 Messagebox(<字符串>text,<字符串>title&#xff0c;messageboxbuttons&a…

C#中Messagebox的简单使用

MessageBox的使用方法比较多&#xff0c;下面对常用的几种做了简单的说明&#xff0c;详细的资料可参考微软官方文档。 Messagebox.Show(String) 显示具有指定文本的消息框。 private void button1_Click(object sender, EventArgs e){//Show(String).显示具有指定文本的消息…

MessageBoxA 和MessageBoxW

文章目录 第一个参数&#xff1a;第二个参数&#xff1a;第三个参数&#xff1a;第四个参数&#xff1a;补充代码实现 MessageBoxA(NULL, text, title, MB_OK) 第一个参数&#xff1a; HWND hWnd 传入一个句柄&#xff0c;这个窗口句柄代表的窗口就是这个消息窗口的所有者&…

C#中MessageBox()用法详解

简介&#xff1a; MessageBox&#xff08;&#xff09;功能是显示一个消息对话框&#xff0c;其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息&#xff0c;如状态或错误的信息。 格式&#xff1a; MessageBox.Show&#xff08;string Text, string Caption,…

C/C++ MessageBox() 弹窗的用法

C/C MessageBox 的用法 目录 一、语法 二、头文件 三、常量 图标常量&#xff0c;按钮常量&#xff0c;返回值 四、示范 五、成品 六、通过返回值判断点击的按钮是什么 七、通过输入的文字来改变弹窗上的文字 一、语法 MessageBox(NULL,("对话框内容"),("对话…

MessageBox()函数用法及参数详解

MessageBox函数 显示模式对话框&#xff0c;其中包含系统图标&#xff0c;一组按钮和简要的特定于应用程序的消息&#xff0c;例如状态或错误信息。消息框返回一个整数值&#xff0c;指示用户单击的按钮。 语法 int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCapti…

MessageBox.Show 用法介绍

简介摘要&#xff1a;MessageBox.Show (String) 显示具有指定文本的消息框。 由 .NET Compact Framework 支持。 MessageBox.Show (IWin32Window, String) 在指定对象的前面显示具有指定文本的消息框。 MessageBox.Show (String) 显示具有指定文本的消息框。 由 .NET Compac…

C# MessageBox用法大全

C#中MessageBox用法大全&#xff08;附效果图&#xff09; 我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下&#xff1a; 1.MessageBox.Show("Hello~~~~"); 最简单的&#xff0c;只显示提示信息。 2.MessageBox.S…

MessageBox 用法详解与实例

摘自&#xff1a;教育网-自学之路&#xff1a;http://www.selfroad.com.cn/content.asp?id83 MessageBox这个函数可以在VC里面显示一个标准对话框&#xff0c;是比较常用的一个信息对话框&#xff0c;其不仅能够定义显示的信息内容、信息提示图标&#xff0c;而且可以定义按钮…

MessageBox()用法简介

MessageBox () 功能显示一个消息对话框。 语法 MessageBox (text,title{,icon{,button{,default}}}) 参数title&#xff1a;string类型&#xff0c;指定消息对话框的标题text&#xff1a;指定消息对话框中显示的消息&#xff0c;该参数可以是数值数据类型、字符串或boolean值…