Android

01: Android Studio目录结构介绍, 安卓开发入门
02: Android中的日志工具类Log详细介绍
03: 添加Button元素, 并且在活动中使用Toast和Menu
04: 安卓开发之Intent使用介绍(显式Intent和隐式Intent)
05: 安卓广播机制讲解(标准广播和有序广播)
06: 安卓广播实现强制下线功能(Kotlin语言实现)


1. 显示Intent

Intent是 Android程序中各组件之间进行交互的一种重要方式,
它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
Intent一般可被用于启动活动、启动服务以及发送广播等场景,
这次我们运用在启动活动上面。Intent大致可以分为两种:显式Intent和隐式Intent,
我们先来看一下显式Intent如何使用。
首先我创建了2个活动:
1.FirstActivity(第一个活动)
package activitytest.example.administrator.activitytest;import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class FirstActivity extends AppCompatActivity {@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.add_item:Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();break;case R.id.remove_item:Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();break;default:}return true;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button1 = (Button) findViewById(R.id.button_1);button1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this,SecondActivity.class);startActivity(intent);}});}
}

第一个活动的配置文件(first_layout.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button_1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button 1" />
</LinearLayout>

2.SecondActivity(第二个活动)
package activitytest.example.administrator.activitytest;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class SecondActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.second_layout);}
}

第二个活动的配置文件(second_layout.xml):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/second_layout"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="activitytest.example.administrator.activitytest.SecondActivity">
<LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/button_2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button 2"/>
</LinearLayout>
</RelativeLayout>
总的配置文件(AndroidManifest.xml):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="activitytest.example.administrator.activitytest"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".FirstActivity"android:label="This is FirstActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".SecondActivity"></activity></application></manifest>
Intent有多个构造函数的重载,
其中一个是Intent(Context packageContext,Class<?>cls)。
这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,
第二个参数class 则是指定想要启动的目标活动,
通过这个构造函数就可以构建出Intent的”意图”。
然后我们应该怎么使用这个Intent呢? Activity 类中提供了一个startActivity()方法,
这个方法是专门用于启动活动的,它接收一个Intent参数,
这里我们将构建好的Intent传入startActivity()方法就可以启动目标活动了。FirstActivity 中按钮的点击事件的代码如下所示:
            @Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this,SecondActivity.class);startActivity(intent);}
我们首先构建出了一个Intent,传入 FirstActivity.this 作为上下文,
传入SecondActivity.class 作为目标活动,这样我们的“意图”就非常明显了,
即在FirstActivity这个活动的基础上打开SecondActivity这个活动。
然后通过startActivity()方法来执行这个Intent.

运行结果:

这时候已经切换到了第二个应用.

可以看到,我们已经成功启动SecondActivity这个活动了。
如果你想要回到上一个活动怎么办呢?很简单,按下Back键就可以销毁当前活动,
从而回到上一个活动了。
使用这种方式来启动活动,Intent的“意图”非常明显,
因此我们称之为: 显式 Intent。

2. 隐式Intent

相比于显式Intent,隐式Intent则含蓄了许多,
它并不明确指出我们想要启动哪一个活动,
而是指定了一系列更为抽象的action和 category 等信息,
然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。什么叫作合适的活动呢?简单来说就是可以响应我们这个隐式Intent的活动,
那么目前SecondActivity可以响应什么样的隐式Intent呢?
额,现在好像还什么都响应不了,不过很快就会有了。通过在<activity>标签下配置<intent-filter>的内容,
可以指定当前活动能够响应的action和 category,
打开AndroidManifest.xml,添加如下代码:
<activity android:name=".SecondActivity"><intent-filter><action android:name="activitytest.example.administrator.activitytest.ACTION_START"></action><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

!这里的activitytest.example.administrator.activitytest是活动所在的地址

在<action>标签中我们指明了当前活动可以响应activitytest.example.administrator.activitytest.ACTION_START这个action,
而<category>标签则包含了一些附加信息,
更精确地指明了当前的活动能够响应的Intent中还可能带有的category。
只有<action>和<category>中的内容同时能够匹配上
Intent中指定的action和 category时,这个活动才能响应该Intent。修改FirstActivity 中按钮的点击事件,代码如下所示:
         @Overridepublic void onClick(View v) {Intent intent = new Intent("activitytest.example.administrator.activitytest.ACTION_START");startActivity(intent);}
可以看到,我们使用了Intent 的另一个构造函数,直接将action的字符串传了进去,
表明我们想要启动能够响应
activitytest.example.administrator.activitytest.ACTION_START这个action的活动。
那前面不是说要<action>和<category>同时匹配上才能响应的吗?
怎么没看到哪里有指定category呢?
这是因为android.intent.category.DEFAULT是一种默认的category,
在调用startActivity()方法的时候会自动将这个category添加到 Intent中。
重新运行程序,在FirstActivity 的界面点击一下按钮,
你同样成功启动SecondActivity了。不同的是,
这次你是使用了隐式Intent 的方式来启动的,
说明我们在<activity>标签下配置的action和 category 的内容已经生效了!

运行结果:

每个Intent中只能指定一个action,但却能指定多个category。
目前我们的Intent中只有一个默认的category,那么现在再来增加一个吧。修改FirstActivity中按钮的点击事件,代码如下所示:
   public void onClick(View v) {Intent intent = new Intent("activitytest.example.administrator.activitytest.ACTION_START");intent.addCategory("activitytest.example.administrator.activitytest.MY_CATEGORY");startActivity(intent);}});
现在我们在AndroidManifest.xml的<intent-filter>中再添加一个category的声明,如下所示:
<activity android:name=".SecondActivity"><intent-filter><action android:name="activitytest.example.administrator.activitytest.ACTION_START"></action><category android:name="android.intent.category.DEFAULT" /><category android:name="activitytest.example.administrator.activitytest.MY_CATEGORY"/></intent-filter></activity>

再次重新运行程序,你就会发现一切都正常了。



安卓开发之Intent使用介绍(显式Intent和隐式Intent)相关推荐

  1. 安卓开发之用RecyclerView做陈列式布局(仿小红书首页/淘宝商品浏览)

    安卓开发之用RecyclerView做陈列式布局 一.使用RecyclerView要先导入recyclerview-v7库 二.在layout文件夹内,新建一个xml文件,编写你要展示的item的样式 ...

  2. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

  3. 安卓开发之Handler、HandlerThread学习篇

    安卓开发之Handler.HandlerThread学习心得篇           开篇说明:本文采用的都是最基础最简单的例子,目的只有一个:希望大家将学习的焦点放在Handler的理解和使用上,我不 ...

  4. 安卓开发之WebView,进度条ProgressBar以及MediaPlayer和SonundPool的使用

    原 安卓开发之WebView,进度条ProgressBar以及MediaPlayer和SonundPool的使用 2018年06月06日 15:04:21 阅读数:106 内容比较简单,仅用作笔记,所 ...

  5. Android(Intent意图初解,显示意图,隐式意图,意图过滤器)

    Android Intent 简介:Intent被称为意图,是安卓程序中的一种比较重要的组件间交户的方式,可以用于组件间的跳转,传递数据等.通常用作启动Activity,Service以及发送广播等. ...

  6. Android显式意图和隐式意图

    intent基本理解 我们都知道Android四大组件:Activity .Service.broadcast receiver 及 内容提供者. 其中,Activity .Service.broad ...

  7. Andriod 显式启动、隐式启动练习简析

    activity_main.xml代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  8. 33 个 JavaScript 核心概念系列(三): 显式 (名义) 与 隐式 (鸭子)类型转换

    原文地址:落明的博客 一. 前言 说实话,JavaScript 的类型转换是个相当头疼的问题,无论是对于初学者还是有经验的老司机.它的难处并不在于概念多难理解,而是情况多且杂,看似相同的情况结果却又出 ...

  9. C#的显式接口和隐式接口

    C#的显式接口和隐式接口 接口的实现分为:隐式实现和显式实现.如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现.显示实现是通过使用接口 ...

  10. JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】

    笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目   录 P15 15.尚硅谷_JS高级_函数的prototype 15:04 1. 函数 ...

最新文章

  1. 判断两个多边形相交的面积_聊聊3D模型组件—顶点,边,多边形
  2. java 传参字符串数组_JAVA语言之okhttp传递数组参数
  3. SPSS 26安装教程
  4. 用函数判断考试得分:
  5. JSP技术之JavaBean
  6. 【转】gem install libv8 错误
  7. BZOJ2525: [Poi2011]Dynamite
  8. 计算机三级网络技术备考复习资料zhuan
  9. 2020年最全易语言安装与配置使用教程
  10. 快学数据挖掘—数据探索—贡献度分析
  11. 有关队列的操作 python
  12. 六一快乐!管她几岁,快乐万岁!
  13. 如何制作独一无二的简历?
  14. 大数据必学Java知识(一):Java基础入门语法和安装
  15. 数字图像处理第八章----图像压缩
  16. scratch案例——打字游戏初级篇
  17. spring源码故事-面筋哥IoC容器的一天(上)
  18. 深度学习-np.pad 填充详解
  19. WINCE里随时用HOT KEY切出中文输入法
  20. 初来乍到,先测试一下

热门文章

  1. 提高scrapy的爬取速度
  2. Chalcolithic 铜石并用时代
  3. 如何打开计算机控制界面,如何打开控制面板 【使用途径】
  4. 《不抱怨的世界》-- 威尔·鲍温(Will Bowen)
  5. 小程序中自定义组件、父子传值的具体步骤(秒懂)
  6. win10企业版跟win10家庭版有啥区别,win10系统各版本区别
  7. STM32 DMA2D技术
  8. 百宝云Web网络验证系统防破解设置
  9. 计算机删除内置用户,如何删除windows的内置账户,administrator
  10. 基于银河麒麟 V10 系统安装和卸载 DM8 数据库