实际上用显式意图打开一个activity就很简单了。只需要指定你要打开的这个activity的class就可以了。

需要注意一点的是创建了一个ThirdActivity必须要在清单文件里面声明。如果没在清单文件里面声明ThirdActivity的效果是这样的:

程序挂掉会有一个友好的提示:FATAL EXCEPTION:main

以后再看到这一个报错,就表明你要开启的这个activity并没有在清单文件里面声明。所以咱们一定要声明它。

由于不需要通过隐式意图开启ThirdActivity,所以说只需要在清单文件里面声明一个name就可以了。

        <activity android:name="com.itheima.callnewactivity.ThirdActivity">

        </activity>

程序运行成功了:


这个就是显式意图。显式意图在intent里面直接指定了我要开启哪一个activity。所以说这个就是显式的。隐式呢?实际通过这段XML

            <intent-filter >
<action android:name="com.itheima.second2"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="itheima"
android:mimeType="itcast/itheima"
/>
</intent-filter>

你不去翻对应的代码究竟打开谁只通过intent-filter匹配的这些数据你是不知道究竟要开启谁。你只有翻了对应的activity或者运行之后你才知道这个东西究竟要开启的是哪一个。所以说这个是隐式的。

但是显式的在这里已经写的很清楚了,我要开启的是ThirdActivity.

    public void openThird(View v){
/* Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent);*/
Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);//传两个参数 第一个是上下文 第二个是class
//class,打开哪一个activity就把它对应的class传进来.
startActivity(intent);

而且如果你开启是用隐式意图,我当前的应用可能有好几个activity都配置了相同的intent-filter.这个在咱们使用手机的时候经常会出现这个情况。比如咱们下载一个软件突然间弹出来有人给你选,比如你手机装了三四个浏览器,有的时候你下载的时候它默认向用户浏览器打开这个链接,那你手机装了不止一个浏览器的时候它突然间会弹出一个界面,让你选用哪一个打开。这是因为我当前手机多个activity配置了相同的意图过滤器。这个时候它不可能把所有的activity都给你打开,让你选一选。

            <intent-filter >
<action android:name="com.itheima.second"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="itheima"/>
</intent-filter>

所以说用隐式意图,就可能出现让你选的这个情况。但是使用显式意图就肯定不能了。你指定了要打开的这个具体的activity的名字,不可能在一个手机里面装了两个包名和类名都一样的activity。所以说显式意图和隐式意图它们俩还是有些区别的。


还有呢用这种方式

        <activity android:name="com.itheima.callnewactivity.ThirdActivity">

        </activity>

指定一个类名的方式打开一个activity,它只能打开当前应用的。

    public void openThird(View v){
/* Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent);*/
Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);//传两个参数 第一个是上下文 第二个是class
//class,打开哪一个activity就把它对应的class传进来.
startActivity(intent);
}

因为在这里要访问这一份字节码,别人用了ThirdActivity.class,我在现在这个代码里面是访问不到的。通过这种方式只能够打开自己应用的activity。用显式意图能不能开别人应用的activity?

    public void openThird(View v){
/* Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent);*/
//Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);//传两个参数 第一个是上下文 第二个是class
//class,打开哪一个activity就把它对应的class传进来.
Intent intent2 = new Intent();
intent2.setClassName("com.itheima.createnewactivity", "com.itheima.createnewactivity.MainActivity");//通过这种方式可以打开其他应用的activity.第一个参数是应用的包名,第二个参数是全类名.
//startActivity(intent);
startActivity(intent2);
}

通过显式意图不但可以开启自己应用的也可以开启别其他应用的,但是前提是你得知道别人应用的包名和你要打开的这一个类的全类名。


一般自己开自己应用的activity是用显式意图。打开自己应用的就没必要非得搞这么麻烦了。只需要通过一个显式意图。如果是想让别人开启你的应用的activity,那就使用隐式意图。很少会用显式意图把应用的包名和activity的全路径都告诉别人。一般都是设置intent-filter然后通过匹配intent-filter的方式来让别人开启你当前的应用对应的activity。

package com.itheima.callnewactivity;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View; public class SecondActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
setContentView(R.layout.activity_second);
} public void openThird(View v){
/* Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent);*/
//Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);//传两个参数 第一个是上下文 第二个是class
//class,打开哪一个activity就把它对应的class传进来.
Intent intent2 = new Intent();
intent2.setClassName("com.itheima.createnewactivity", "com.itheima.createnewactivity.MainActivity");//通过这种方式可以打开其他应用的activity.第一个参数是应用的包名,第二个参数是全类名.
//startActivity(intent);
startActivity(intent2);
} }
package com.itheima.callnewactivity;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View; public class ThirdActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
setContentView(R.layout.activity_third);
} public void call(View v){
Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent); } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="openThird"
android:text="打开第三个Activity" />
<TextView
android:layout_below="@id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="20sp"
android:text="第二个activity"
/>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="call"
android:text="打电话" />
<TextView
android:layout_below="@id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="20sp"
android:text="第三个activity"
/>
</RelativeLayout>

04_显示意图打开activity的更多相关文章

  1. 03_隐式意图打开activity

    想让第一个activity把第二个activity打开的话,在清单文件里面声明一下并且 右键Debug As Android Application居然没有报错 mimeType  讲HTML的时候就 ...

  2. android intent 隐式意图和显示意图(activity跳转)

    android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity  B ...

  3. [android] 显示意图激活另外一个activity

    可以使用跳转的方式类似javaweb来实现界面转换 显示意图就是必须要指定开启组件的具体信息,包名,组件名,组件的class 新建一个类TwoActivity ,继承Activity类,重写onCre ...

  4. 打开Activity时,不自动显示(弹出)虚拟键盘

    打开Activity时,不自动显示(弹出)虚拟键盘 在AndroidManifest.xml文件中<activity>标签中添加属性 android:windowSoftInputMode ...

  5. 基础学习总结(八)--Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组 ...

  6. Unity3D研究院之打开Activity与调用JAVA代码传递参数

    原地址:http://www.xuanyusong.com/archives/667    Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发 ...

  7. Android学习记录(7)—Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的 ...

  8. Activity 事件以及如何得到新打开Activity关闭后返回的数据

    1: package com.example.activity_basic; 2:   3: import android.os.Bundle; 4: import android.app.Activ ...

  9. Android的显示意图和隐式意图总结

    显示意图 简而言之: 通过指定特定Activity的包名和类名开启Activity 应用场景: 一般应用于本App内的activity间的跳转. XML配置信息: AndroidManifest.xm ...

随机推荐

  1. vue.js基础知识总结

    初始化一个项目 npm init -y 安装一些依赖 npm install 名称 --save 例如 npm install vue axios bootstrap --save --save 表示 ...

  2. C#的特性学习草稿

    原文发布时间为:2008-11-22 -- 来源于本人的百度文章 [由搬家工具导入] 举个简单的例子: 先定义个特性 从Attribute继承,并标明用法 [AttributeUsage(Attrib ...

  3. Python基础教程笔记——第4章:字典

    字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...

  4. Linux MTD (Memory Technology Device) subsystem analysis -For Atheros char device

    Linux MTD (Memory Technology Device) subsystem analysis For Atheros char device 读了Linux MTD 源代码分析 对这 ...

  5. nginx 安装过程中的not found

    linux 发行版本:centos zlib not found openssl not found yum install zlib-devel yum install openssl-devel

  6. 牛客网 牛客网暑期ACM多校训练营(第三场)E KMP

    链接:https://www.nowcoder.com/acm/contest/141/E 题目描述 Eddy likes to play with string which is a sequenc ...

  7. response对象学习

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  8. otl_stream流相关绑定变量

    声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...

  9. lemon oa前端页面——由user-base-list谈项目组织

    content user-base-list.jsp中指定<%pageContext.setAttribute("currentHeader", "user&quo ...

  10. OpenLayers3基础教程——OL3基本概念

    从本节開始,我会陆陆续续的更新有关OL3的相关文章--OpenLayers3基础教程,欢迎大家关注我的博客,同一时候也希望我的博客可以给大家带来一点帮助. 概述: OpenLayers 3对OpenL ...