当前位置:首页 » 安卓系统 » android隐式intent

android隐式intent

发布时间: 2022-09-24 12:22:34

⑴ 如何使用ContentProvider类实现隐式Intent

举例说明:
1、定义对应的ContentProvider类TestProvider,继承ContentProvider。
类里面需要实现一系列的abstract方法,如:OnCreate,getType,insert…

2、在应用程序的AndroidManifest.xml中加入<provider>标签,例如:
<provider android:name="TestProvider"
android:authorities="com.android.test.settings"/>

android:name是指对应ContentProvider的类名,也就是所建的TestProvider类
android:authorities是标识部分,为了保证唯一性,这里使用完整的包名和类名

3、在想要调用的activity所对应应用的AndroidManifest.xml中,把该activity的intent-filter添加上对Data的要求

4、在StartActivity(intent)之前,设定该intent对应的action(调用setAction()指定)和data(调用setData(Uri.parse(content:// com.android.test.settings /test)))。StartActivity之后,Android系统内部就会根据上面Uri里面的com.android.test.settings,去找到对应的TestProvider(根据android:authorities),然后再调用getType方法。这样Android系统会根据getType返回的数据类型,以及intent在setAction时制定的action,去启动对应的Activity

⑵ android当中显式intent和隐式intent的区别

区别如下:

  1. 显式启动Activity指的是在Intent内部直接声明要启动的activity所对应的class。

  2. 隐式启动Activity的intent到底发给哪个activity,需要进行三个匹配,一个是action, 一个是category,一个是data,可以是全部或部分匹配,同样适用于Service和BroadcastReceiver。

A:显式启动
下面用代码来解释什么是显式启动。
Intent intent=new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
B:隐式启动
隐式启动不同之处在于并不需要像Intent(MainActivity.this, SecondActivity.class)这样传参数然后再Start另一个Activity.需要在intent添加过滤器intentfilter。
<activity
android:name="com.example.android.tst.SecondActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="com.example.android.tst.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
这样,需要在启动另一个Activity的时候只需要如下方法就可以:
Intent intent=new Intent("com.example.android.tst.SecondActivity");
startActivity(intent);

⑶ Android如何使用隐式Intent启动另一个Activity

  1. 找到另一个Activity 的action

```java

Intent intent = new Intent("action");

context.startActivity(intent);

```

⑷ android 显示intent和隐士inent的区别

以下内容为CSDN上(网名:yuan1590)对安卓显示意图和隐身意图的总结(ps前人种树,树,后人乘凉,所以我就粘过来了,希望帮到您):
1. Intent
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,
Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来执行动作和产生事件。
使用 Intent 可以激活 Android 应用的三个核心组件:活动(Activity)、服务(Service)和广播接收器(BroadcastReceiver)。

2. 显式意图、隐式意图
Intent可以划分成显式意图和隐式意图。
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
如: 在 MainActicity 中打开一个新的 Acticity -- OtherActivity
1. Intent intent = new Intent();
2. intent.setComponent(new ComponentName(MainActivity.this, OtherActivity.class));
3. 第二行代码可以更换为:intent.setClass(MainActivity.this, OtherActivity.class);
4. 也可以使用构造器来指定组件: Intent intent = new Intent(MainActivity.this, OtherActivity.class)
三种 “显式意图” 指定方式等价
隐式意图:没有明确指定组件名的Intent为隐式意图。
Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(data: URI和数据类型)找到最合适的组件来处理这个意图
例如拨打电话的意图:
Uri uri = Uri.parse("tel:" + phoneCode);
Intent intent = new Intent(Intent.ACTION_CALL, uri);

对于隐式意图,Android是怎样寻找到这个最合适的组件呢?记的前面我们在定义活动时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。

动作测试(Action test)
一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:
+ 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
<intent-filter><!-- 空的 --></intent-filter>
+ 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试

类别测试(Category test)
对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。
原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。
但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。
因此自定义 Activity 的时候,不要以为光定义一个 action 就够了。这样用 startActivity() 来激活这个 Activity 的时候将一直报错。
原因就是,他内部要求去匹配 android.intent.category.DEFAULT 这个类别。

因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。
(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)

数据测试(Data test)
当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。
例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;
如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;
如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。
当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。
数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:
a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。
b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。
这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。
c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。
d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。
如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。
换句话说,一个组件被假定为支持content:和file: 数据如果它的过滤器仅列举了一个数据类型。

⑸ 在android中,显示intent和隐示intent有什么区别

可以这样理解:
显示Intent是指定一个Activity来启动,比如你经理吩咐你去给他买杯奶茶;
而隐式Intent并不指定某一个Activity,而是指定一个特征,比如你经理说“那个长得帅的给我去买杯奶茶”,虽然没有指定你去执行,但是你觉得自己很帅,你也去响应了。另外,隐式Intent的话有可能有多个Activity去响应,这时候就需要用户去操作选择具体执行的Activity,比如说这时候你一个同事跑出来说“我长的也很帅 我去买”,这时候就有两个人响应你经理号召了,然后你经理就从你们两个人中选出他觉得比较帅的去买奶茶了,就是这样

⑹ android 调用qq视频

Android程序调用QQ的接口方法。
在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接。
Android仿QQ用户帐号登录界面效果,附上完整的源代码,本实例中的实现方法比较简单,主要是调用一张图片来实现登录界面,另外还添加了一些按钮的美化效果,虽然很简单的例子,但对于android手机界面编程打基础,是挺有用的参考范例。

⑺ 显示intent和隐示intent有什么区别

android当中显式intent和隐式intent的区别

定义:

Intent定义:Intent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。说明:Android系统使用IntentFilter
来寻找与隐式Intent相关的对象。详细解释:显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。在显式Intent消息中,决定目标组件的唯一要素就是组件名称,因此,如果你的Intent中已经明确定义了目标组件的名称,那么你就完全不用再定义其他Intent内容。而对于隐式Intent则不同,由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。Android系统寻找与Intent请求意图最匹配的组件具体的选择方法
是:Android将Intent的请求内容和一个叫做IntentFilter的过滤器比较,IntentFilter中包含系统中所有可能的待选组件。如果IntentFilter中某一组件匹配隐式Intent请求的内容,那么Android就选择该组件作为该隐式Intent的目标组件。Android如何知道应用程序能够处理某种类型的Intent请求呢?这需要应用程序在Android-Manifest.xml中声明自己所含组件的过滤器(即可以匹配哪些Intent请求)。一个没有声明Intent-Filter的组件只能响应指明自己名字的显式Intent请求,而无法响应隐式Intent请求。而一个声明了IntentFilter的组件既可以响应显式Intent请求,也可以响应隐式Intent请求。在通过和
IntentFilter比较来解析隐式Intent请求时,Android将以下三个因素作为选择的参考标准。

Action

Data

Category

而Extra和Flag在解析收到Intent时是并不起作用的。

⑻ Android显示Intent和隐示Intent之间的区别

在Activity的跳转中
>Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity
>通过设置Activity的包名和类名实现跳转,称为显式意图
>通过指定动作实现跳转,称为隐式意图
###显式意图
* 跳转至同一项目下的另一个Activity,直接指定该Activity的字节码即可
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent);
* 跳转至其他应用中的Activity,需要指定该应用的包名和该Activity的类名
Intent intent = new Intent();
//启动系统自带的拨号器应用
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
startActivity(intent);
###隐式意图
* 隐式意图跳转至指定Activity
Intent intent = new Intent();
//启动系统自带的拨号器应用
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);
* 要让一个Activity可以被隐式启动,需要在清单文件的activity节点中设置intent-filter子节点
<intent-filter >
<action android:name="com.itheima.second"/>
<data android:scheme="asd" android:mimeType="aa/bb"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
* action 指定动作(可以自定义,可以使用系统自带的)
* data 指定数据(操作什么内容)
* category 类别 (默认类别,机顶盒,车载电脑)
* 隐式意图启动Activity,需要为intent设置以上三个属性,且值必须与该Activity在清单文件中对三个属性的定义匹配
* intent-filter节点及其子节点都可以同时定义多个,隐式启动时只需与任意一个匹配即可
#####获取通过setData传递的数据
//获取启动此Activity的intent对象
Intent intent = getIntent();
Uri uri = intent.getData();
###显式意图和隐式意图的应用场景
* 显式意图用于启动同一应用中的Activity
* 隐式意图用于启动不同应用中的Activity
* 如果系统中存在多个Activity的intent-filter同时与你的intent匹配,那么系统会显示一个对话框,列出所有匹配的Activity,由用户选择启动哪一个

⑼ Android跳转页面用Intent隐式好还是显示好

各有各的好处……显式的可以从1个Activity跳到另外一个明确的Activity。隐式的就不确定跳到哪个Activity了,但是要对跳转进行描述,描述的内容就是目标Activity的特点,那么系统会自动匹配你需要的目标Activity了。
例如Intent intent = new Intent(Intent.ACTION_CALL); 就是为intent 绑定了ACTION_CALL的动作,就是打电话。

热点内容
c语言链表建立 发布:2024-05-06 16:17:33 浏览:220
python3xlwt3 发布:2024-05-06 16:09:59 浏览:372
c语言的意思啊 发布:2024-05-06 15:54:19 浏览:69
如何重置手机密码realme 发布:2024-05-06 14:57:25 浏览:348
自己搭建外网服务器违法吗 发布:2024-05-06 14:56:32 浏览:630
苹果安卓哪个步数准确 发布:2024-05-06 14:43:58 浏览:240
安卓手机软件用什么编程语言写 发布:2024-05-06 14:30:07 浏览:657
des解密python 发布:2024-05-06 14:30:06 浏览:684
n的阶乘算法 发布:2024-05-06 14:29:57 浏览:552
安卓手机为什么停服 发布:2024-05-06 14:29:08 浏览:93