`
zhangfy068
  • 浏览: 148439 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用Intent 和IntentFilter进行通信

 
阅读更多

一、Component属性

为Intent中的一个属性。

 

ComponentName comp = new ComponentName(ComponentAttr.this
					, SecondActivity.class);
				Intent intent = new Intent();
				//为Intent设置Component属性
				intent.setComponent(comp);
//				Intent intent = new Intent(ComponentAttr.this
//					, SecondActivity.class);
				startActivity(intent);

 //获取该Activity对应的Intent的Component属性

 

		ComponentName comp = getIntent().getComponent();
		//显示该ComponentName对象的包名、类名
		show.setText("组件包名为:" + comp.getPackageName()
			+ "\n组件类名为:" + comp.getClassName());

 二、Action ,Category,intent-filter配置

有点像struct的Action 页面分离,通过xml配置

 

				Intent intent = new Intent();
				//为Intent设置Action属性(属性值就是一个普通字符串)
				intent.setAction(ActionAttr.CRAZYIT_ACTION);
				startActivity(intent);

 <activity android:name=".SecondActivity"

				  android:label="@string/app_name">
			<intent-filter>
				<!-- 指定该Activity能响应Action为指定字符串的Intent -->
				<action android:name="org.crazyit.intent.action.CRAZYIT_ACTION" />
				<!-- 指定该Action能响应Action属性为helloWorld的Intent -->
				<action android:name="helloWorld" />
				<!-- 指定该Action能响应Category属性为指定字符串的Intent -->
				<category android:name="android.intent.category.DEFAULT" />   
			</intent-filter>
		</activity>

 

 

<activity android:name=".SecondActivity"
				  android:label="@string/app_name">
			<intent-filter>
				<!-- 指定该Activity能响应Action为指定字符串的Intent -->
				<action android:name="org.crazyit.intent.action.CRAZYIT_ACTION" />
				<!-- 指定该Action能响应Action属性为helloWorld的Intent -->
				<action android:name="helloWorld" />
				<!-- 指定该Action能响应Category属性为指定字符串的Intent -->
				<category android:name="android.intent.category.DEFAULT" />   
			</intent-filter>
		</activity>

 

 获得上一个的action

 

String action = getIntent().getAction();
		//显示Action属性
show.setText("Action为:" + action);//值为org.crazyit.intent.action.CRAZYIT_ACTION

 

 category的用法 运行指定的action和包含此category的Activity

 

				Intent intent = new Intent();
				//设置Action属性
				intent.setAction(ActionCateAttr.CRAZYIT_ACTION);
				//添加Category属性
				  intent.addCategory(ActionCateAttr.CRAZYIT_CATEGORY);
				startActivity(intent);

  三、指定Action 、Category调用系统的Activity

 

Intent 和Category含有大量的常量

 

使用系统的常量action即可调用系统的Activity  获取联系人,注意需要配置访问联系人的权限

 

package org.crazyit.action;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

/**
 * Description: <br/>
 * site: <a href="http://www.crazyit.org">crazyit.org</a> <br/>
 * Copyright (C), 2001-2012, Yeeku.H.Lee <br/>
 * This program is protected by copyright laws. <br/>
 * Program Name: <br/>
 * Date:
 * 
 * @author Yeeku.H.Lee kongyeeku@163.com
 * @version 1.0
 */
public class SysAction extends Activity
{
	final int PICK_CONTACT = 0;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button) findViewById(R.id.bn);
		// 为bn按钮绑定事件监听器
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View arg0)
			{
				// 创建Intent
				Intent 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);
			}
		});
	}
	@Override
	public 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();
					// 查询联系人信息
					Cursor cursor = managedQuery(contactData, null
						, null, null, null);
					// 如果查询到指定的联系人
					if (cursor.moveToFirst())
					{
						String contactId = cursor.getString(cursor
							.getColumnIndex(ContactsContract.Contacts._ID));
						// 获取联系人的名字
						String name = cursor.getString(cursor
							.getColumnIndexOrThrow(
								ContactsContract.Contacts.DISPLAY_NAME));
						String phoneNumber = "此联系人暂未输入电话号码";
						System.out.println("-------------" + contactId);
						//根据联系人查询该联系人的详细信息
						Cursor phones = getContentResolver().query(
							ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
							null,
							ContactsContract.CommonDataKinds.Phone.CONTACT_ID
								+ " = " + contactId, null, null);
						System.out.println("===================" + phones);
						if (phones.moveToFirst())
						{
							//取出电话号码
							phoneNumber = phones
								.getString(phones
									.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
						}
						// 关闭游标
						phones.close();
						EditText show = (EditText) findViewById(R.id.show);
						//显示联系人的名称
						show.setText(name);
						EditText phone = (EditText) findViewById(R.id.phone);
						//显示联系人的电话号码
						phone.setText(phoneNumber);
					}
					// 关闭游标
					cursor.close();
				}
				break;
		}
	}
}

1、 返回桌面

 

 

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

 

 2、Data的用法

Data分为二个部分 类型+数据

 

 

package org.crazyit.intent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * Description:
 * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class DataAttr extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button)findViewById(R.id.bn);
		//为bn按钮添加一个监听器
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				//创建Intent
				Intent intent = new Intent();
				String data = "http://www.crazyit.org";
				//根据指定字符串解析出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()
		{
			@Override
			public void onClick(View v)
			{
				//创建Intent
				Intent 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);
		//为edit按钮添加一个监听器
		call.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				//创建Intent
				Intent intent = new Intent();
				//为Intent设置Action属性(动作为:拨号)
				intent.setAction(Intent.ACTION_DIAL);
				String data = "tel:13800138000";
				//根据指定字符串解析出Uri对象
				Uri uri = Uri.parse(data);				
				//设置Data属性
				intent.setData(uri);
				startActivity(intent);
			}
		});			
	}
}

 

 3、Extra属性

多个action之间进行数据交换,Bundle  像一个Map。。

 

 

分享到:
评论

相关推荐

    Android使用Intent和Intentfilter进行通信

    在Android应用开发中,Intent和IntentFilter是两个至关重要的组件,它们构成了Android系统服务和组件之间通信的核心机制。本文将深入探讨Intent与IntentFilter的工作原理、使用方式以及它们在实际应用中的重要性。 ...

    Intent和IntentFilter

    使用 Intent 和 IntentFilter,Android 应用能够灵活地实现组件间的通信和系统服务的调用。不过,为了安全起见,应谨慎使用隐式 Intent 打开 Service,因为这可能导致隐私泄露或滥用。从 Android 5.0 开始,隐式 ...

    疯狂android讲义源代码.7z.001(共三卷)

    第五章使用intent和intentFilter进行通信 第六章android应用的资源 第七章图形与图像处理 第八章android的数据存储和IO 第九章使用contentProvider实现数据共享 第十章service与broadcastReceiver 第十一章多媒体...

    疯狂android讲义源代码.7z.003(共三卷)

    第五章使用intent和intentFilter进行通信 第六章android应用的资源 第七章图形与图像处理 第八章android的数据存储和IO 第九章使用contentProvider实现数据共享 第十章service与broadcastReceiver 第十一章多媒体...

    疯狂android讲义源代码.7z.002(共三卷)

    第五章使用intent和intentFilter进行通信 第六章android应用的资源 第七章图形与图像处理 第八章android的数据存储和IO 第九章使用contentProvider实现数据共享 第十章service与broadcastReceiver 第十一章多媒体...

    疯狂Android讲义源码

    第5章、使用Intent和IntentFilter进行通信 第6章、Android应用的资源 第7章、图形与图像处理 第8章、Android的数据存储和IO 第9章、使用ContentProvider实现数据共享 第10章、Service与BroadcastReceiver 第11章、...

    疯狂Android讲义源代码2

    第5章 使用Intent和IntentFilter进行通信 第6章 Android应用的资源 第7章 图形与图像处理 第8章 Android的数据存储和IO 第9章 使用ContentProvider实现数据共享 第10章 Service与Broadcast Receiver 第11章 多媒体...

    疯狂Android讲义(第2版)完整清晰版.part1

    第5章 使用Intent和IntentFilter进行通信 第6章 Android应用的资源 第7章 图形与图像处理 第8章 Android数据存储与IO 第9章 使用ContentProvider实现数据共享 第10章 Service与BroadcastReceiver 第11章 ...

    疯狂Android讲义(第2版)完整清晰版.part2

    第5章 使用Intent和IntentFilter进行通信 第6章 Android应用的资源 第7章 图形与图像处理 第8章 Android数据存储与IO 第9章 使用ContentProvider实现数据共享 第10章 Service与BroadcastReceiver 第11章 ...

    Android组件间通信–深入理解Intent与IntentFilter

    使用IntentFilter时要注意,只有隐式Intent才会进行Intent解析和过滤。显式Intent会直接启动指定的组件,跳过了IntentFilter的匹配过程。因此,为了实现跨应用的组件复用,开发者需要正确地定义IntentFilter,使其...

    Android组件间通信--深入理解Intent与IntentFilter

    在Android开发中,Intent和IntentFilter是实现组件间通信的关键机制。Intent作为消息载体,能够连接不同的应用组件,包括Activity、Service、BroadcastReceiver等,使得它们可以互相传递数据和触发操作。...

    Android实例代码

    第5章、使用Intent和IntentFilter进行通信 5.1、Intent对象详解: 5.2、Intent的属性及intent-filter配置:Component属性; Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; Extra...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第5章、使用Intent和IntentFilter进行通信 5.1、Intent对象详解: 5.2、Intent的属性及intent-filter配置:Component属性; Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; ...

    疯狂Android讲义第二版源代码1-8

    疯狂Android讲义第二版 李刚著 电子工业出版社 2013年3月第1版 第1章 Android应用与开发...第5章 使用Intent和IntentFilter进行通信 第6章 Android应用的资源 第7章 图形与图像处理 第8章 Android数据存储与IO

    android中Activity和Intent的关系

    Activity负责展示用户界面并处理用户交互,而Intent则协调这些界面之间的通信和数据流动。理解和熟练掌握这两者的关系和用法,对于构建功能丰富的Android应用至关重要。通过不断的实践和学习,开发者可以灵活地利用...

    android整合--intent

    在Android开发中,Intent是一种非常重要的组件...总结,Intent在Android开发中起着桥梁的作用,连接起各个组件,使得组件间能够高效地通信和协作。理解并熟练掌握Intent的使用,是提升Android应用开发能力的关键步骤。

    Intent系统调用示例

    本篇文章将详细解析“Intent系统调用示例”,并结合提供的IntentDemo项目进行深入探讨。 1. **Intent的基本概念** Intent是一个消息对象,它封装了应用程序想要执行的操作以及操作所需要的数据。在Android中,...

Global site tag (gtag.js) - Google Analytics