Android基础-intent详解

Intent (意图) 用于Activity之间的数据传递以及Activity之间的切换(这两者都可以在一个应用多个Activity之间实现,同样也适用于不同应用间的Activity。同一个应用的实现和不同应用间的实现区别在于后者需要通过action和Category实现,而前者可以通过action和为Intent添加参数实现)。


一个Intent对象包含一组信息:
Component name 指的是所要启动的Activity名字,通常为XXX.class 也有可能写成XXX.this
Action 动作,指的是要求要启动的Activity去做某事,也可以通过action来找到Activity。
Data 动作需要的数据
category 被执行动作的附加信息
Extras intent所传递的数据


intent用法(同一个应用中):
无参数的Activity跳转
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent); 

带参数的Activity跳转

Intent intent = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from Activity1!");
intent.putExtras(bundle);
startActivity(intent);  

获得数据

Bundle bundle=getIntent().getExtras();
String name=bundle.getString("name");

带返回结果的Activity跳转Activity1

Intent intent = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from Activity1!");
intent.putExtras(bundle);       // 上面两行代码相当于intent.putExtra(“test”, "AA”);
startActivityForResult(intent,1);  //这里Activity跳转是使用startActivityForResult,,还有一个参数被称为请求码,为常量,这里为了方便设为1
Activity2

Intent intent=getIntent();
Bundle bundle=new Bundle();
bundle.putString("name", "This is from Activity2!");
intent.putExtras(bundle);
setResult(2, intent);//这里需要设置一下返回内容,第一个参数被称为返回码,也是一个常量,同样方便起见设为2


重写Activity1中方法onActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==1){         //首先要确保请求码正确,如果请求码错误,则不会判断返回码
            if(resultCode==-1)
                  setTitle("cancle");
            else if (resultCode==2) {        //判断返回码是否正确,并提示
                 String temp=null;
                 Bundle bundle=data.getExtras();
                 if(bundle!=null)   temp=bundle.getString("name");
                 setTitle(temp);
            }
        }
    }
intent用法(不用应用中,这里的不同应用多用于调用系统应用):

Uri uri = Uri.parse("tel:0800000123");  
Intent intent = new Intent(Intent.ACTION_DIAL, uri);  
startActivity(intent);  
这里会用到通过动作去调用其他应用中的Activity,在AndroidManifest.xml中有一个叫intent-Filter的标签,是用来筛选intent,而筛选intent则是靠动作(action)以及category实现的。

在Activity中可以用语句

intent.setAction( "Intent.ACTION_DIAL");
intent.addCategory(Intent.CATEGORY_DEFAULT);

 

来设置action和category。这里需要注意的一点是每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以在AndroidManifest.xml文件中必须要有"android.intent.category.DEFAULT",而在Activity中,intent.addCategory(Intent.CATEGORY_DEFAULT);可以不写,写了也没什么用。一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。只有 Intent 的所有 category 都匹配上,Activity 才会接收这个Intent。

显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名得Intent为显式意图,显式意图明确指定了Intent应该传递给那个组件。   

隐式意图:没有明确指定组件名得Intent为隐式意图。android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来

处理这个意图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值