Android基础学习第三篇—Intent的用法

写在前面的话:

1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正。

2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽。

*************************************我只是分割线***************************************

上一篇已经讲了一些关于Activity的东西,这次记录一下android中比较重要的一个类Intent。

1. 什么是Intent?

Intent是Android程序中各组件之间进行交互的一种重要方式,它一般可被用于启动活动、启动服务、以及发送广播等场景,这一篇主要讲述在活动启动过程中Intent的用法,它的用法大致分为两种情况:显式Intent和隐式Intent。

2. 显示Intent用法

就像上一篇讲的关于活动的启动、活动间的传值其实都是显式Intent的用法,

<2.1>页面普通跳转

Intent _intent = new Intent();
_intent.setClass(MainActivity.this, TestActivity.class);
startActivity(_intent);

上面表示的是从活动MainActivity跳转到活动TestActivity,不传递任何数据。

<2.2>页面跳转,并返回值

在MainActivity活动中,按钮点击中添加如下代码:

Intent _intent = new Intent();
_intent.setClass(MainActivity.this, ActivityC.class);
startActivityForResult(_intent, 100);

在ActivityC活动中,把数据传递回去:

    class ButtonActivityAListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.btnreturn) {
                Intent _intent = new Intent();
                EditText editText = (EditText) findViewById(R.id.edittext_first);
                String inputStr = editText.getText().toString();
                _intent.putExtra("dashenzaijia", inputStr);
                setResult(Activity.RESULT_OK, _intent);
                finish();
            }
        }
    }//可能还有一种情况,如果用户不是点击按钮返回的上一个活动,而是点击的手机的Back按钮,这时候只要重写onBackPressed方法就好了,如下
@Overridepublic void onBackPressed() {   Intent _intent = new Intent();   _intent.putExtra("dashenzaijia", "need transfer value");   setResult(Activity.RESULT_OK, _intent);   finish();}

在MainActivity活动的onActivityResult方法中,获取对应的返回值:

    @Override
    protected void onActivityResult(int arg0, int arg1, Intent arg2) {
        // TODO Auto-generated method stub
        super.onActivityResult(arg0, arg1, arg2);
        if (arg0 == 100 && arg1 == Activity.RESULT_OK) {
            String returnValue = arg2.getStringExtra("dashenzaijia");
            TextView view = (TextView) this.findViewById(R.id.textview_showresult);
            if (!returnValue.isEmpty()) {
                view.setText("来自Activity C的值:" + returnValue);
            } else {
                view.setText(null);
            }
        }
    }

请注意参数中100,还有Activity.RESULT_OK,它们是两个页面传值的暗号,只有对上了暗号,才能去获取对应活动传回来的值。

<2.3>把值传递给下一个活动

在MainActivity活动的跳转按钮中,实现如下代码:

    Intent _intent = new Intent();
    _intent.setClass(MainActivity.this, TestActivity.class);
    _intent.putExtra("transfertockey", "give current value to activity c");
    startActivity(_intent);

在TestActivity活动中的onCreate(Bundle savedInstanceState)方法获取:

   Intent intent = getIntent();
   String value = intent.getStringExtra("transfertockey");
   Log.i("onCreate", value);

 3. 隐式Intent用法

<3.1.1>显示一个新的活动:如上面2.1说的,我们在显示一个新的活动的时候,可以传那个新的活动的类名,也可以用如下方法,

在AndroidManifest.xml文件中,为CanvasActivity活动添加配置,自定义一个Action,并加上默认的Category:

        <activity android:name=".CanvasActivity">
            <intent-filter>
                <action android:name="firstapp.canvasactivity.firstaction" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

然后再MainActivity活动中,调用方法如下:

    class NotificationClickListener implements OnClickListener {
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.btnshownotification) {
                Intent intent = new Intent("firstapp.canvasactivity.firstaction");
                startActivity(intent);
            }
        }
    }

备注:<category android:name="android.intent.category.DEFAULT" />这一句话一定不能少,不然会报错的。

<3.1.2>显示一个新的活动,在3.1.1基础上,我们也可以自定义一个Category,

        <activity android:name=".CanvasActivity">
            <intent-filter>
                <action android:name="firstapp.canvasactivity.firstaction" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="firstapp.canvasactivity.firstcategory" />
            </intent-filter>
        </activity>

调用和3.1.1差不多,只是多了一句:

    class NotificationClickListener implements OnClickListener {
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.btnshownotification) {
                Intent intent = new Intent("firstapp.canvasactivity.firstaction");
                intent.addCategory("firstapp.canvasactivity.firstcategory");
                startActivity(intent);
            }
        }
    }    

<3.2.1>显示一个网页,在ActivityB活动中,点击按钮代码,即可打开浏览器:

ActivityB在AndroidManifest.xml文件中的配置是:

        <activity
            android:name=".ActivityB"
            android:label="@string/title_activity_b">
        </activity>

调用如下:

        Button btnOpenWeb = (Button)findViewById(R.id.btnopenweb);
        btnOpenWeb.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });

备注:一定要在网址前面添加http://,不然会报错的,系统不知道www.baidu.com是什么,应该用什么打开。

<3.2.2>显示一个网页,网页打开的代码和上面一样,唯一不同的是在AndroidManifest.xml中,我们在ActivityB活动的配置中加上几行代码:

        <activity
            android:name=".ActivityB"
            android:label="@string/title_activity_b">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />

                <data android:scheme="http" />
            </intent-filter>
        </activity>

运行代码,你会发现,我们的ActivityB也变成了打开网页的应用的一个选项。

<3.3>调用地图,显示位置

        Button btnOpenWeb = (Button)findViewById(R.id.btnopenweb);
        btnOpenWeb.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("geo:114.06667,22.61667?q=高新园地铁站"));
            }
        });

和3.2.2一样,如果在AndroidManifest.xml的ActivityB中加上一句<data android:scheme="geo" />,ActivityB也变成了能够打开这个地理位置的列表中选项之一。

<3.4>调用系统拨号

        Button btnOpenWeb = (Button)findViewById(R.id.btnopenweb);
        btnOpenWeb.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:15811588511"));
                startActivity(intent);
            }
        });

好了,Intent的基本的一些用法就先说到这里,有什么问题,请指正。

时间: 2024-10-12 13:18:05

Android基础学习第三篇—Intent的用法的相关文章

Android学习笔记三:Intent实现页面跳转

在主Activity的OnCreate()方法中,通过findViewById得到Activiity_main中已定义的组件,例如Button.EditText等,注意需要强制转型view到具体的类型. 给取得的组件btn添加监听器如OnClickListener(),在其中实例化Intent对象,参数为要跳转的出发类和目标类. 用putExtra()方法添加内容到intent对象中,内容为K-V对.K中可写标记,V中存要传输的内容. public void onClick(View arg0)

android 基础学习图片六progross

加载进度条应用 android 基础学习图片六progross,布布扣,bubuko.com

javascript基础学习(三)

javascript之运算符 学习要点: 表达式 运算符:一元运算符,算术运算符,关系运算符,逻辑运算符,*位运算符,赋值运算符 一.表达式 表达式有常量表达式,变量表达式,复合表达式. 二.算术运算符 一元:+(正号).-(负号).++.—— 二元:*./.%.+.- 三.关系运算符 ==.=== ps:等同运算符比相等运算符要求更为严格,等同运算符只有在两个操作数类型相同,并且值也相同的情况下才会返回true. <.<=.>.>= instanceof运算符.       in

Android开源项目第三篇——优秀项目篇

本文为那些不错的Android开源项目第三篇——优秀项目篇,主要介绍那些还不错的完整Android项目. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和团体篇 记录的项目主要依据是项目有意思或项目分层规范比较好. Linux 项目地址:https://github

EnjoyingSoft之Mule ESB基础系列第三篇:Mule message structure - Mule message结构

目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5. Mule的Variable 6. 使用Java操作Mule Message Mule ESB是一个使用Java语言编写的开源企业服务总线,企业服务总线英文Enterprise Service Bus,简称ESB.其相关源代码也托管在GitHub上,可以在https://github.com/mu

JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

java网络爬虫基础学习(三)

尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=time&page_limit=20&page_start=0 浏览器打开该地址: 发现是这样的 在这里我们需要用java抓取电影的信息,首先要找到资源链接,浏览器右键->检查打开谷歌调试工具 我们可以看到下图 有很多的资源请求,在这里我是一个个搜索,看那个是电影信息的Headers 发

Java基础学习笔记三 Java基础语法

Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例使用其功能. 变量名.方法名(); Scanner类 Scanner类可以完成用户键盘录入,获取到录入的数据. Scanner使用步骤: 导包: import java.util.Scanner; 创建对象实例:Scann

Android基础学习第二篇—Activity

写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正. 2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽. *************************************我只是分割线***************************************