我是靠谱客的博主 超级薯片,最近开发中收集的这篇文章主要介绍Android中Intent和IntentFilter进行通信Intent启动不同组件的方法Data,Type属性与intent-filter配置指定Action调用系统的Activity实例一查看并获取联系人电话实例二:返回系统界面实例三:Data属性配置。实例四:使用Action,Data属性启动系统Activity总结:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 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;
	@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();
					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 {
	@Override
	public 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代码:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android: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>
		<activity
			android: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>
		<activity
			android: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.org
				port是8888即可启动该Activity -->
				<data android:scheme="lee"
					  android:host="www.imerbao.org"
					  android:port="8888" />
			</intent-filter>
		</activity>
		<activity
			android: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.org
				path是/mypath,即可启动该Activity -->
				<data android:scheme="lee"
					  android:host="www.imerbao.org"
					  android:path="/mypath" />
			</intent-filter>
		</activity>
		<activity
			android: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.org
				port是8888,且path是/mypath,才可启动该Activity -->
				<data android:scheme="lee"
					  android:host="www.imerbao.org"
					  android:port="8888"
					  android:path="/mypath"/>
			</intent-filter>
		</activity>
		<activity
			android: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.org
				port是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()
		{
			@Override
			public void onClick(View v)
			{
				// 创建Intent
				Intent 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()
		{
			@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);
		// 为call按钮添加一个监听器
		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:12345678911";
				// 根据指定字符串解析出Uri对象
				Uri uri = Uri.parse(data);
				// 设置Data属性
				intent.setData(uri);
				startActivity(intent);
			}
		});
	}

总结:

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

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

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

最后

以上就是超级薯片为你收集整理的Android中Intent和IntentFilter进行通信Intent启动不同组件的方法Data,Type属性与intent-filter配置指定Action调用系统的Activity实例一查看并获取联系人电话实例二:返回系统界面实例三:Data属性配置。实例四:使用Action,Data属性启动系统Activity总结:的全部内容,希望文章能够帮你解决Android中Intent和IntentFilter进行通信Intent启动不同组件的方法Data,Type属性与intent-filter配置指定Action调用系统的Activity实例一查看并获取联系人电话实例二:返回系统界面实例三:Data属性配置。实例四:使用Action,Data属性启动系统Activity总结:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部