实际上用显式意图打开一个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. 前端学习之--CSS

    CSS 常用帮助文档 CSS:被用来同时控制多重网页的样式和布局.HTML页面中CSS样式的写法有3种: 1:标签中写入 <body style='margin o auto;'> 2:h ...

  2. http_load分析(转)

    http://www.cnblogs.com/xuning/p/3954057.html 一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_l ...

  3. 【纯净版windows系统】U盘启动制作图文教程

    无废话,按照步骤来就可以. 1.一个大于4G的U盘(格式化)准备好U盘,请注意制作过程中对U盘有格式化操作,有用的东西请先备份 2.UltraISO(软碟通软件)下载安装百度“软碟通”,或者访问 ht ...

  4. 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

    背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...

  5. 盘点UML中的四种关系

    生活中,我们既是独立的个体,又通过联系形成各种关系,比方说:朋友.恋人.父子,同学--于是乎,出现了神乎其神的六人定律. 那么在UML中又存在什么样的关系呢?以下我们来梳理一下. 关联(Associa ...

  6. Material UI:很强大的CSS框架

    Material UI 是一款功能很强大,界面却十分清新简洁的CSS框架.Material UI利用了Google的Material Design 全新设计语言.而且让每个UI组件都变得很独立.因此开 ...

  7. js中字符串的拼接的另一种方法

    // 按一定长度截断字符串,并使用 + 运算符进行连接. // 分隔字符串尽量按语义进行,如不要在一个完整的名词中间断开. // 特别的,对于HTML片段的拼接,通过缩进,保持和HTML相同的结构. ...

  8. 分享:Mac与Phy组成原理的简单分析

    原文链接:http://blog.chinaunix.net/uid-20528014-id-3050217.html 1.General 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成. ...

  9. 关于 equals()与hashcode()方法

    类重写了equals()方法也必须重写hashcode()方法,否则会导致该类无法与基于散列值的集合(HashMap.HashSet.HashTable)一起正常使用. hashcode()方法遵循的 ...

  10. POJ3761 Bubble Sort

    对1~n组成的序列进行冒泡排序,一共进行了k趟,问有几个符合题意的序列. 注意:这里指每一趟是指交换当前相邻的全部逆序对,比如:2 1 4 3进行一趟交换就是1 2 3 4 假设我们细心观察.就会发现 ...