Intent组件学习(小白向)

Intend的介绍

Intent 在英语里有意图,意向,专注的意思,我觉得用他的英语含义理解他的功能在合适不过了,他的功能就是协助应用间的交互与通讯或者是一个应用中的Activity(或Service)之间的交互。简单来说它就像一个桥梁,连接着不同的界面。要是你需要在两个界面之间相互转换,那你肯定需要他了。
如下图所示,两个Activity分别是自动点餐和结算单,当单击“下单”按钮时,通过Intent将数据发送给结算单,同时页面跳转到结算单界面。
在这里插入图片描述
在Android系统的四个核心组件中,除了Contentprovider以外,其他三个核心组件(Activity、Service、Broadcast receiver)实际上都是被一个叫做Intent的异步消息来激活的。激活的组件可以是Android系统自身提供的,也以是开发者自定义的,其激活方式有显式Intent和隐式Intent两种:
(1)显式Intent:通过指定目标组件名称来启动组件,并且每次启动的组件只能有一个。一般情况下由于开发者不知道其他应用程序的组件名称,所以显式Intent通常用于启动应用程序内部组件;
(2)隐式Intent:不指定要启动的目标组件名称,而是指定Intent的Action、Data或Category等,通常用隐式Intent激活其他应用程序中的组件;在启动组件时,会去匹配AndroidManifest.xml相关组件的Intent-filter,并逐一匹配出满足属性的组件,当不止一个满足时就会弹出一个让用户选择动哪个目标组件的对话框。

显式Intent启动Activity

显式Intent即直接指定需要打开的Activity对应类。下面以单击Button按钮实现AActivity跳转到BActivity为例说明显式Intent的使用方法。如图,通过单击启动按钮,实现由A启动B。下面简单介绍一下。在这里插入图片描述
首先先建个Activity,建立方法如下:在这里插入图片描述
AActivity和对应的xml文件的代码:
下面展示 AActivity对应代码。这个代码其实很简单,只有一个Button的监听事件和Intent调用

package experiment.studyintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class AActivity extends Activity {
private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.amain);
        btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(AActivity.this,BActivity.class);//Intent括号里面的参数用法有很多,
                // 这里我们只是从一个界面启动另一个界面,直接填如两个Activity即可
                startActivity(intent);//启动,其实Intent就像一个运输车辆,里面是可以装内容的
            }
        });
    }
}

下面展示 AActivity对应的xml文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:hint="启动BActivity"
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

BActivity的代码什么也没有,只有对应的xml文件有一个TextView写着BActivity,所以就不展示了,直接展示结果:在A中点击启动按钮就会跳转到B,点击返回就回到A。
在这里插入图片描述
注意:
1.如果要指定某一个Activity作为启动界面,那么必须在配置文件(AndroidManifest.xml)中放入intend-filter,另外每一个Activity文件都必须在配置文件中进行声明。
2.两个Activity需要有统一的style,否则可能会报错。

显式intent的数据传输

步骤:
1.在AActivity中存入数据
2.在BActivity中取出数据
3.如果需要一次传输多个数据,那么需要借助bundle来实现
AActivity:

String sname = edt.getText().toString();
Intent intent = new Intent(AActivity.this, BActivity.class);//Intent括号里面的参数用法有很多,
// 这里我们只是从一个界面启动另一个界面,直接填如两个Activity即可
intent.putExtra("sanme", sname);
startActivity(intent);//启动,其实Intent就像一个运输车辆,里面是可以装内容的

BActivity:

 tv= (TextView) this.findViewById(R.id.tv);
        Intent intent = getIntent();
        String sname = intent.getStringExtra("sname");
        tv.setText(sname);

即实现了在A中输入的字符串发送给B。

隐式Intent启动Activity

隐式Intent启动Activity:
隐式启动Activity是指Android系统根据过滤规则自动去匹配对应的Intent。
首先修改配置清单文件代码,添加BActivity的intent-filter属性,并且category属性值设置为“android.intent.category.DEFAULT",详细代码如下:

<activity android:name=".BActivity">
            <intent-filter>
                <action android:name="cn.edu.nnutc.ie.MYACTION" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

然后在AActivity的Button单击监听事件中设置Intent发送的Action(动作)为“cn.edu.nnutc.ie.MYACTION",这样与清单文件中配置的BActivity的Action能进行匹配。实现代码如下:

   Intent intent = new Intent();
   intent.setAction("cn.edu.nnutc.ie.MYACTION");
   startActivity(intent);

Intent还可直接调用android系统组件

// 调用浏览器  
Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail");  
Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);  
  
// 调用地图  
Uri mapUri = Uri.parse("geo:100,100");  
Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);  
  
// 播放mp3  
Uri playUri = Uri.parse("file:///sdcard/test.mp3");  
Intent intent = new Intent(Intent.ACTION_VIEW, playUri);  
intent.setDataAndType(playUri, "audio/mp3");  
  
// 调用拨打电话  
Uri dialUri = Uri.parse("tel:10086");  
Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);  
// 直接拨打电话,需要加上权限<uses-permission id="android.permission.CALL_PHONE" />  
Uri callUri = Uri.parse("tel:10086");  
Intent intent = new Intent(Intent.ACTION_CALL, callUri);  
  
// 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的)  
Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");  
Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);  
// 直接发邮件  
Intent intent = new Intent(Intent.ACTION_SEND);  
String[] tos = { "zuolongsnail@gmail.com" };  
String[] ccs = { "zuolongsnail@163.com" };  
intent.putExtra(Intent.EXTRA_EMAIL, tos);  
intent.putExtra(Intent.EXTRA_CC, ccs);  
intent.putExtra(Intent.EXTRA_TEXT, "the email text");  
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");  
intent.setType("text/plain");  
Intent.createChooser(intent, "Choose Email Client");  
  
// 发短信  
Intent intent = new Intent(Intent.ACTION_VIEW);  
intent.putExtra("sms_body", "the sms text");  
intent.setType("vnd.android-dir/mms-sms");  
// 直接发短信  
Uri smsToUri = Uri.parse("smsto:10086");  
Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);  
intent.putExtra("sms_body", "the sms text");  
// 发彩信  
Uri mmsUri = Uri.parse("content://media/external/images/media/23");  
Intent intent = new Intent(Intent.ACTION_SEND);  
intent.putExtra("sms_body", "the sms text");  
intent.putExtra(Intent.EXTRA_STREAM, mmsUri);  
intent.setType("image/png");  
  
// 卸载应用  
Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);  
Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);  
// 安装应用  
Intent intent = new Intent(Intent.ACTION_VIEW);  
intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");  
  
// 在Android Market中查找应用  
Uri uri = Uri.parse("market://search?q=淘宝");           
Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值