Android第五章Intent

第四章初次认识Intent是把它比喻成一个信封,这里正式学习它,Intent,中文意思是意图,它主要用于启动Activity,Service,BroadCast等组件的,所以Intent类就是一个表达启动组件意图的类,这就是它的定义。

启动组件的意图,有2种启动组件的方式:显式和隐式。

Intent类的属性有:Action,Category,Date,Type,Extra和Component。

看回显式启动组件的意图,既然是显示就应该讲明白启动的是哪一个组件,Component属性的值ComponentName类就直接表明要开动哪一个组件了。

ComponentName cn=new ComponentName(MainActivity.this, "com.myapp.MyActivity");
intent.setComponent(cn);
startActivity(intent);
当然有构造器直接用,效果一样,都是直接指明要启动的是哪一个组件。



其他的属性:Action,Category,Data,Type都主要用于隐式启动组件。

最重要的是Action属性,给Intent对象设置一个Action属性,表明这个意图是想找个可以做Action内容的组件,然后就去AndroidManifest.xml中每个<activity>中的<intent-filter>中找声明了可以做Action的组件,另外Category是Action的附加声明,他们两个都是字符串来的。Category不写的话也会有默认值的,所以在AndroidManifest.xml中要设置category的值为默认值,Data则是为Action提供数据的,主要是提供Uri类型的数据,Type则是提供MIME类型的数据。

intent.setAction("Hello");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
 <activity 
            android:name="com.myapp.MyActivity">
            <intent-filter>
                <action android:name="Hello"/>
                <category android:name="android.intent.category.DEFAULT"/>            
            </intent-filter>
        </activity>
这种隐式启动组件有一个很大的好处就是可以启动系统其他应用的组件,例如系统的电话本,浏览器什么的。

(1)与打电话有关的系统Activity的隐式意图开启

String array[]={"查看电话信息","编辑电话信息","显示拨打电话界面","直接打电话"};
	ListView listview;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listview=(ListView)findViewById(R.id.listview);
		ArrayAdapter<String> adapter=new ArrayAdapter<>(MainActivity.this, R.layout.listview_item, array);
		listview.setAdapter(adapter);
		listview.setOnItemClickListener(new AdapterView.OnItemClickListener()
		{

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3)
			{
				// TODO Auto-generated method stub
				Intent intent=new Intent();
				Uri uri;
				switch (arg2)
				{
				case 0:
					uri=Uri.parse("content://contacts/people/4");
					intent.setAction(Intent.ACTION_VIEW);
					intent.setData(uri);
					startActivity(intent);
					break;
				case 1:
					uri=Uri.parse("content://contacts/people/4");
					intent.setAction(Intent.ACTION_EDIT);
					intent.setData(uri);
					startActivity(intent);
					break;
				case 2:
					uri=Uri.parse("tel:110");
					intent.setAction(Intent.ACTION_DIAL);
					intent.setData(uri);
					startActivity(intent);
					break;
				case 3:
					uri=Uri.parse("tel:120");
					intent.setAction(Intent.ACTION_CALL);
					intent.setData(uri);
					startActivity(intent);
					break;
				default:
					break;
				}
			}
		});
这里要注意下content://contacts/people就是打开联系人的路径了,后面的数字是第几个联系人,除此之外还应该声明程序需要哪些权限,有权限才能开启到系统的activity

 <uses-permission 
        android:name="android.permission.CALL_PHONE"/>
    <uses-permission 
        android:name="android.permission.READ_CONTACTS"/>
    <uses-permission 
        android:name="android.permission.WRITE_CONTACTS"/>
(2)打开浏览器,地图

case 4:
					uri=Uri.parse("http://www.baidu.com");
					intent.setAction(Intent.ACTION_VIEW);
					intent.setData(uri);
					startActivity(intent);
					break;
				case 5:
					uri=Uri.parse("http://ditu.google.cn/maps?hl=zh&mrt=loc&q=39.940409,116.355257(西直门)");
					intent.setAction(Intent.ACTION_VIEW);
					intent.setData(uri);
					startActivity(intent);
					break;


Extra属性,用来组件之间的数据交换的,intent.putExtra()可以放一个Bundle对象到Intent中,通过这个意图打开的组件,getIntent之后,利用intent,getExtra()可以得到这个Bundle对象,然后拿到里面的数据。


Flag属性:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值