Android Activity(二)

Android Activity(二)

二、Intent

题外话:为什么我会将打电话、发短信、拍照等视作系统功能操作(事实上Android官方也是这么理解的),可能很多人认为在Android操作系统中,这些只是一个个的程序,跟QQ没什么区别。但是这些功能毕竟是从功能机时代开始,作为一部手机所具有的基本功能。举个例子,你的手机里可能没有自带QQ、支付宝等程序,但是绝对自带了拨号程序、短信、相机等程序。另外,我们可以从网上形形色色的Android应用上看出,拨号、短信、相机等应用只占了极其少数。当然,也有在同一个系统中存在多个相同的系统功能程序,比如你在某条短信中要打开某个URL,假如你装了Chrome浏览器和系统自带浏览器,当你点击该URL后,系统会根据你的点击事件寻找到符合Action功能要求的程序Activity,并弹出对话框让你选择使用哪一个浏览器进行浏览。

1. Intent,意图,对一次操作的抽象描述。

我个人将其理解为:一个Activity要与其他Activity进行互动,需要使用Intent作为媒介才能相互通信(好比两个人对话之间需要空气作为媒介传递声音一样,当然你可以用棉线::>_<::),所以Intent就是将Activity要进行的具体、具象化的操作抽象成相应的数据进行传递。

2. Activity使用Intent进行系统功能操作,如打电话,发邮件、短信等,记得加上权限!
  • 第一种方式:(Android官方推荐,仅去到拨号界面,类似于)
    intent.setAction(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:" + phoneNumber));
    startActivity(intent);
    
  • 第二种方式:(直接拨打)
    intent.setAction("android.intent.action.CALL");
    intent.setData(Uri.parse("tel:" + phoneNumber));
    startActivity(intent);
    
    其实这就是一种Activity跳转方式,在当前Activity去调用系统自带的拨号程序中的拨号Activity,至于两种方式的不同,这个具体在下面会讲到。
    事实上,我所说的Activity使用Intent去调用系统功能操作,说白了就是通过Intent跳转到相应程序的Activity,中间还传递了相应的参数。
3. 使用Intent启动新的Activity

分为两种方式:显式Intent和隐式Intent

  • 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    MainActivity.this.startActivity(intent);
    
  • 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。
    Intent intent = new Intent();
    intent.setAction("activity.second");
    MainActivity.this.startActivity(intent);
    
    AndroidMnifest.xml部分内容如下:
    <activity
          android:name="com.example.activity.SecondActivity"
          android:label="@string/app_name" >
          <intent-filter>
              <action android:name="activity.second" />
              <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
      </activity>
    
4. 使用Intent在Activity间传值
  • 第一个Activity,传值端:
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("str", "传过去的值");//(name, value)
    MainActivity.this.startActivity(intent);
    
  • 第二个Activity,接收端:
    Intent intent = getIntent( );
    Bundle bundle = intent.getExtras();
    String str = bundle.getString("str");
    
5. 使用Intent在Activity之间返回值
  • 第一个Activity,接收端:
    private final static int REQUEST_CODE = 1;//识别码
    startActivityForResult(intent, REQUEST_CODE);//跳转Activity
    
    要接受返回的值需要复写方法:
    protected void onActivityResult(int requestCode, int resultCode, Intent data){}
    
    方法中对code值进行判断并获取intent中bundle的键值。
  • 第二个Activity,传值端:
    Intent intent = new Intent();
    intent.putExtra("back", "第二个Activity返回的值");
    setResult(RESULT_CODE, intent);
    finish();//该方法结束当前Activity并返回调用它的Activity
    
6. Bundle 捆绑

Bundle类为Key-Value形式的键值对
Activity间的数据通讯可通过Bundle类实现(必须借助Intent类)

  • 第一个Activity:传值端:
    Intent intent = new Intent();    
    intent.setClass(MainActivity.this, SecondActivity.class);    
    Bundle mBundle = new Bundle();    
    mBundle.putString("Data", "data from MainActivity");//压入数据    
    intent.putExtras(mBundle);    
    startActivity(intent);
    
  • 第二个Activity:接收端:
    Bundle bundle = getIntent().getExtras();//得到传过来的bundle  
    String data = bundle.getString("Data");//读出数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值