Android 中 Intent 的简单应用

概述

Intent负责对应用中一次操作的动作、动作涉及的数据、附加数据进行描述。Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。

Intent协助完成组件间的通讯。Intent在组件间通讯起着一个媒体中介的作用,专门提供组件调用的相关信息,实现调用者与被调用者之间的解耦。

Intent跳转

Intent跳转分为显示跳转与隐士跳转。

显示跳转

知道一个Activity的名字使其跳转到另一个已知的Activity.

*类名调整

*Intent I = new Intent(A.this, B.class);

隐士跳转

是一个Activity通过动作进行跳转,没有指定具体的Activity。

*自定义Action

new Intent("com.xxxx.android.MyAction”)

*系统Action

new Intent(Intent.ACTION_VIEW)

new Intent(Intent ACTION_DIALL)

new Intent(Intent ACTION_CALL)

实例1:调用拨号键盘

</pre></p><p><pre name="code" class="java">public boolean onTouchEvent(MotionEvent event){ 
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            Uri uri = Uri.parse("tel:13426377223");
            Intent intent = new Intent(Intent.ACTION_DIAL, uri);
            startActivity(intent);

        }
        return true;
    }

实例2:直接拨打电话

public boolean onTouchEvent(MotionEvent event){
        //判断触摸屏的动作是否被按下
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            //通过Intent隐士跳转直接拨打电话

            Uri uri = Uri.parse("tel:13426377223");
            Intent it = new Intent(Intent.ACTION_CALL, uri);
            startActivity(it);

        }
        return true;
    }

要在AndroidManifest.xml中加入拨打电话的权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

Intent传递数据

通过Intent传递

通过Intent对象直接调用putExtra(String key, Object value)方法

public boolean onTouchEvent(MotionEvent event){
        //判断触摸屏的动作是否被按下
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            Intent intent = new Intent(); //通过Intent对象
            intent.setClass(MainActivity.this, NewActivity.class);
            intent.putExtra("name", "wangyan");
            intent.putExtra("sex", "Man");
            startActivity(intent); //启动与之相匹配的的Activity

        }
        return true;
    }

从Intent取数据

通过Intent对象调取Intent.getXXX()

private String tag = "NewActivity";

TextView t;

Intent intent; //声明Intent对象

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);//这里可以使用setContentView(R.layout.xxx)显示某个视图….

        intent = getIntent();//获得intent对象

        String name = intent.getStringExtra("name");

        String sex = intent.getStringExtra("sex");

        Log.d(tag, "name:" + name + "sex:" + sex);

        setContentView(R.layout.activity_main); //为当前界面加载布局文件

        t = (TextView) findViewById(R.id.action_settings); 

    }

通过Bundle传递

通过Bundle对象调用putXXX(key, value)方法

public boolean onTouchEvent(MotionEvent event){
        //判断触摸屏的动作是否被按下
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            Intent intent = new Intent(); //通过Intent对象
            intent.setClass(MainActivity.this, NewActivity.class);
            //构建Bundle对象
            Bundle b = new Bundle();
            //向b里存放对象
            b.putString("name", "Wangyan");
            b.putString("sex", "Man");
            intent.putExtra("bundle", b);
            startActivity(intent); //启动与之相匹配的的Activity

        }
        return true;
    }
获取Bundle

通过Intent对象的getExtras()方法获得Bundle的对象,再通过Bundle对象的getXXX()方法获得数据

private String tag = "NewActivity";
Intent intent; //声明Intent对象
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//这里可以使用setContentView(R.layout.xxx)显示某个视图….

        intent = getIntent();//获得intent对象
<span style="white-space:pre">	</span>Bundle bundle = intent.getBundleExtra("bundle");
        String name = bundle.getString("name");
        String sex = bundle.getString("sex");

        Log.d(tag, "name:" + name + "sex:" + sex);
        setContentView(R.layout.activity_main); //为当前界面加载布局文件
    }

Android页面之间进行数据回传

描述:页面1跳转到页面2,页面2再返回页面1同时返回数据

页面1相关代码:
   Intent intent = new Intent();
   intent.setClass(页面1.this, 页面2.class);
   Bundle bundle = new Bundle();
   intent.putExtras(bundle);//将Bundle添加到Intent,也可以在Bundle中添加相应数据传递给下个页面,例如:bundle.putString("abc", "bbb");
   startActivityForResult(intent, 0);// 跳转并要求返回值,0代表请求值(可以随便写)
页面2接收数据相关代码
   Intent intent = this.getIntent();
   Bundle bundle = intent.getExtras();
   bundle.putString("aaa", "back");//添加要返回给页面1的数据
   intent.putExtras(bundle);
   this.setResult(Activity.RESULT_OK, intent);//返回页面1
   this.finish();
页面1接收返回数据:(需要重写onActivityResult)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 0 && resultCode == Activity.RESULT_OK) {
            Bundle bundle = data.getExtras();
            gameView.backString = bundle.getString("aaa");
             Toast.makeText(this, backString, Toast.LENGTH_SHORT).show();
        }
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值