实际上用显式意图打开一个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. Foundation框架的一些实用方法:替换字符串,去空格,反转

    //定义一个可变字符串, Format后面可以跟字符串类型,也可以传入C语言的字符串数组 NSMutableString *str = [NSMutableString stringWithForma ...

  2. 选课(codevs 1378)

    题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...

  3. BZOJ 2308 莫队入门经典

    题目链接  https://www.lydsy.com/JudgeOnline/problem.php?id=2038 参考博客 https://www.cnblogs.com/Paul-Guderi ...

  4. HDU 5512 Pagodas【博弈】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5512 题意: 给定集合,最初有两个数a,b,如果两个人依次使用集合中的元素相加减,如果得到的数均不在 ...

  5. 实验二:编写输出“Hello word!”

    一:编写输出“Hello word!” 1.运行eclipse,在project name中输入要创建的项目名称. 2.创建java类,点击File->New->Class,在弹出窗口中N ...

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

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

  7. 【python】搜索引擎方面的资料

    http://blog.csdn.net/hguisu/article/category/1230933

  8. [Javascript] Understanding the .constructor property on JavaScript Objects

    Constructor functions hold an interesting purpose in JavaScript. Unlike in classical languages, they ...

  9. Zookeeper中的FastLeaderElection选举算法简述

    Zookeeper是一个开源的分布式应用协调项目, 当中为了保证各节点的协同工作,Zookeeper在工作时须要有一个Leader. 而Leader是怎样被选举出来的?Zookeep中使用的缺省算法称 ...

  10. android 自己定义水平和圆形progressbar 仅仅定义一些style就能够

    效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...