实际上用显式意图打开一个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. 潘多拉的盒子(bzoj 1194)

    Description Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的格 ...

  2. 2017"百度之星"程序设计大赛 - 初赛(A)数据分割

    n<=100000条相等/不等关系描述<=100000个数,把这些数据分割成若干段使得每一段描述都出现冲突且冲突只出现在最后一行. 相等关系具有传递性,并查集维护:不等关系根据相等关系进行 ...

  3. django学习之- Ajax

    提示:jquery要使用1版本,因为高版本已不兼容低版本的游览器.参考url:http://www.cnblogs.com/wupeiqi/articles/5703697.html原生ajax:Aj ...

  4. hdu6110(线段树+lca)

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=6110 分析 注意到,若干条路径的交一定也是条路径 我们可以维护一个线段树,seg[l..r]存着第l条~第 ...

  5. spring/spring boot/spring mvc中用到的注解

    在spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了解决EJB等大型企业框架对应用程序的侵入性,因此大量依靠配置文件来“非侵入式”得给POJ ...

  6. 分析Linux文件rwx属性的含义

    Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来. ls -l(这个参数是字母L的小写,不是数字1) 这个命 ...

  7. Meteor跟踪器(Tracker)

    跟踪器是用于当模板会话变量发生了变化自动更新的一个小型库. 为了向你展示跟踪器是如何工作的,我们将创建按钮将用于更新会话. meteorApp/import/ui/meteorApp.html < ...

  8. convnet源代码解析(一):基础准备

    Jeremy Lin ConvNet是一个基于GPU实现的卷积神经网络开源码(C++11).是由多伦多大学的Geoffrey Hinton深度学习团队编写的,它的最初版本号是Hinton的学生Alex ...

  9. aix用户登录次数受限问题(3004-300 输入了无效的登录名或password)

    当登录AIX系统.username或password不对以至于多次登录,超过系统设定的次数,怎样解锁: 1.用root用户登录系统 2.chuser unsuccessful_login_count= ...

  10. 2016/3/16 45道MySQL 查询练习题

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...