第一行代码学习2(3)

Intent的隐式用法


隐式Intent是通过对注册Activity是自定义了一些action、category属性,然后在代码中通过new Intent(“android.intent.action.自定义action”)启动,或者在代码中添加intent.addCategory(“android.intent.category.自定义category”),再通过startActivity(Intent intent)的方式启动。代码如下:

<activity
   android:name=".SecondActivity"
   android:label="@string/app_name" >
      <intent-filter>
<action android:name="android.intent.action.SECONDACTIVITY" />
<category android:name="android.intent.category.MYCATEGORY"/>
<category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
</activity>
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);                  intent.setData(Uri.parse("http://www.baidu.com"));
                //隐式Intent打开浏览器
                //然后通过 Uri.parse()方法,将一个网址字
                //符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去
                startActivity(intent);
            }
        });
    }

setData():接收一个 Uri 对象。指定当前 Intent 正在操作的数据,而
这些数据通常都是以字符串的形式传入到 Uri.parse()方法中解析产生的。
< intent-filter>标签中还可配置< data>标签,有以下内容:
1.android.scheme : 用于指定数据协议部分,例如http://;
2.android.host : 用于指定数据的主机名部分,如:www.baidu.com;
3.android:port : 用于指定数据的端口部分,紧随在主机名之后;
4.android:path : 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容;
5.android:mimeType : 用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
隐式Intent用来打电话的时候代码如下:

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setdata(Uri.parse("tel:10086"));//双引号中的字符串的格式都是固定的,例如电话的tel:是小写的字母,换成大写的则不能启动打电话的View
startActivity(intent);

Intent数据的互相传输


1.从一个活动【传入】另一个活动
在需要传数据的地方加入如下代码:

            @Override
            public void onClick(View v) {
                String str = "7月过N3!!!";
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                intent.putExtra("flag", str);
                startActivity(intent);
            }

在被启动的activity中加入如下代码:

Intent intent = getIntent();
数据类型 引用 = intent.get数据类型Extra();
最后使用获取的数据。

2.从一个活动【返回】一个数据回一个活动
在发送数据的地方写类似如下代码:

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, 1);//第二个参数是请求码,只要是一个唯一值就可以了,这里传入了1。

            }

在另一个启动的activity中设置要返回的数据:

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("SecondActivity", "Hello Ativity");
                setResult(RESULT_OK, intent);//这个方法十分重要,是专门用于向上一个活动返回数据的
                //一 般只 使用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用
                //了 finish()方法来销毁当前活动
                finish();
            }

再回到需要接受数据的activity,重写如下方法接收数据:

    /**
     * 第一个参数 requestCode,即我们在启动活动时传入的请求码。用来判断数据的来源,既从哪个activity传回来的
     * 第二个参数 resultCode, 即我们在返回数据时传入的处理结果,根据具体的使用场景使用
     * 第三个参数 data,即携带着返回数据的 Intent。
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
            case 1:
                if(resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("SecondActivity");
                    Log.i("FirstActivity", returnedData);
                }
        }
    }

如果是按下Back键的数据返回需要在当前的activity中重写onBackPressed()方法:

@Override
public void onBackPressed(){
    Intent intent = new Intent();
    intent.putExtra("flag", "传递信息");
    setResult(RESULT_OK, intent);
    finish();
}

这一篇关于intent数据之间传递的内容十分重要,在今后的开发当中可能经常会用到,所以要熟练掌握并灵活使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值