详解Android Intent

2023-05-16

一、 Intent 作用
        Intent被译作意图,其实还是很能传神的,Intent期望做到的,就是把实现者和调用者完全解耦,调用者专心将以意图描述清晰,发送出去,就可以梦想成真,达到目的。


        Intent 是一个将要执行的动作的抽象描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity 或者service,所以可以将intent理解成activity之间的粘合剂。



二、 Intent的构成

       要在不同的activity之间传递数据,就要在intent中包含相应的东西,一般来说数据中最基本的应该包括:

-  Action: 当日常生活中,描述一个意愿或愿望的时候,总是有一个动词在其中。比如:我想 三个俯卧撑;我要 一部x片;我要 一部血泪史,之类云云。在Intent中,Action就是描述看、做、写等动作的,当你指明了一个Action,执行者就会依照这个动作的指示,接受相关输入,表现对应行为,产生符合的输出。在Intent类中,定义了一批量的动作,比如ACTION_VIEWACTION_PICK ,之类的,基本涵盖了常用动作,整一个降龙十八掌全集

标准的Activity Actions
ACTION_MAIN                             作为一个主要的进入口,而并不期望去接受数据
ACTION_VIEW                             向用户去显示数据
ACTION_ATTACH_DATA               用于指定一些数据应该附属于一些其他的地方,例如,图片数据应该附属于联系人
ACTION_EDIT                              访问已给的数据,提供明确的可编辑
ACTION_PICK                              从数据中选择一个子项目,并返回你所选中的项目
ACTION_CHOOSER                      显示一个activity选择器,允许用户在进程之前选择他们想要的
ACTION_GET_CONTENT               允许用户选择特殊种类的数据,并返回(特殊种类的数据:照一张相片或录一段音)
ACTION_DIAL                               拨打一个指定的号码,显示一个带有号码的用户界面,允许用户去启动呼叫
ACTION_CALL                              根据指定的数据执行一次呼叫
(ACTION_CALL在应用中启动一次呼叫有缺陷,多数应用ACTION_DIAL,ACTION_CALL不能用在紧急呼叫上,紧急呼叫可以用ACTION_DIAL来实现)
ACTION_SEND                             传递数据,被传送的数据没有指定,接收的action请求用户发数据
ACTION_SENDTO                         发送一个信息到指定的某人
ACTION_ANSWER                        处理一个打进电话呼叫
ACTION_INSERT                          插入一条空项目到已给的容器
ACTION_DELETE                          从容器中删除已给的数据
ACTION_RUN                               运行数据,无论怎么
ACTION_SYNC                             同步执行一个数据
ACTION_PICK_ACTIVITY              为已知的Intent选择一个Activity,返回别选中的类
ACTION_SEARCH                         执行一次搜索
ACTION_WEB_SEARCH                执行一次web搜索
ACTION_FACTORY_TEST              工场测试的主要进入点,


标准的广播Actions
ACTION_TIME_TICK                   当前时间改变,每分钟都发送,不能通过组件声明来接收,只有通过Context.registerReceiver()方法来注册
ACTION_TIME_CHANGED            时间被设置
ACTION_TIMEZONE_CHANGED   时间区改变
ACTION_BOOT_COMPLETED       系统完成启动后,一次广播
ACTION_PACKAGE_ADDED         一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)
ACTION_PACKAGE_CHANGED    一个已存在的应用程序包已经改变,包括包名
ACTION_PACKAGE_REMOVED   一个已存在的应用程序包已经从设备上移除,包括包名(正在被安装的包程序不能接收到这个广播)
ACTION_PACKAGE_RESTARTED 用户重新开始一个包,包的所有进程将被杀死,所有与其联系的运行时间状态应该被移除,包括包名(重新开始包程序不能接收到这个广播)
ACTION_PACKAGE_DATA_CLEARED 用户已经清楚一个包的数据,包括包名(清除包程序不能接收到这个广播)
ACTION_BATTERY_CHANGED 电池的充电状态、电荷级别改变,不能通过组建声明接收这个广播,只有通过Context.registerReceiver()注册
ACTION_UID_REMOVED 一个用户ID已经从系统中移除


-  Data(数据): 要事实的具体的数据,一般由一个Uri变量来表示

下面是一些简单的例子:

ACTION_VIEW content://contacts/1 //显示identifier为1的联系人的信息。
ACTION_DIAL  content://contacts/1 //给这个联系人打电话

除了Action和data这两个最基本的元素外,intent还包括一些其他的元素,

-  Category(范畴):  指定Action范围,这个选项指定了将要执行的这个action的其他一些额外的约束.有时通过Action,配合Data或Type,很多时候可以准确的表达出一个完整的意图了,但也会需要加一些约束在里面才能够更精准。比如,如果你虽然很喜欢做俯卧撑,但一次做三个还只是在特殊的时候才会发生,那么你可能表达说:每次吃撑了的时候 ,我都想做三个俯卧撑。吃撑了,这就对应着Intent的Category的范畴,它给所发生的意图附加一个约束。在Android中,一个实例是:所有应用的主Activity(单独启动时候,第一个运行的那个Activity...),都需要一个Category为 CATEGORY_LAUNCHER,Action为ACTION_MAIN的Intent。


-  Type(数据类型):   用于指定类型,以供过滤(比如ACTION_VIEW同时指定为TypeImage,则调出浏览图片的应用).一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行判定。

-  Component(组件):   当我们常用Action,Data/Type,Category去描述一个意图,这是Android推荐,这种模式称:Implicit Intents. 通过这种模式,提供一种灵活可扩展的模式,给用户和第三方应用一个选择权。比如:一个邮箱软件,大部分功能都好,就是选择图片的功能做的很土,怎么办?如果它采用的是Implicit Intents,那么它就是一个开放的体系了,手机中没有其他图片选择功能的情况下,可以继续使用邮箱默认的,如果有,你可以任意选择来替代原有模块完成这功能,一切都自然而然。但这种模式需要付出性能上的开销,因为毕竟有一个检索过程。于是,Android提供了另一种模式,叫做Explicit Intents ,就需要Component的帮助了。Component就是完整的类名,形如com.xxxxx.xxxx ,一旦指明了,可以直接调用,自然是速度快. 适合在你明确知道这就是一个内部模块的时候,使用它。


-  Extras(附加信息):    是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。


-  Flags(标志位):   能识别,有输入,整个Intent基本就完整了,但还有一些附件的指令,需要放在Flags中带过去。顾名思义,Flags是一个整形数,有一些列的标志 位构成,这些标志,是用来指明运行模式的。比如,你期望这个意图的执行者,和你运行在两个完全不同的任务中(或说进程也无妨吧...),就需要设置FLAG_ACTIVITY_NEW_TASK 的标志位。


Android 的一个特色就是 application A 的 activity 可以启动 application B 的 activity,尽管 A 和 B 是毫无干系的,而在用户看来,两个场景紧密联系,视觉上二者构成了一个整体。Android 就是把这种误觉定义为 Task,它既不是 class,也不是 AndroidMainifest.xml 中的一个元素。从表现上看 Task 就像是一个 stack,一个一个的 activity 是构成 stack 的元素,做着入栈 (push) 和出栈 (pop-up)这样简单重复性的劳动。

默认的规则总是满足大多数的应用场景,但是也总会有一些例外打破习以为常的惯例。Task 的默认规则同样并非牢不可破,修改的方法还是有的。借助 Intent 中的 flag 和 AndroidMainifest.xml 中 activity 元素的属性,就可以控制到 Task 里 Activity 的关联关系和行为。

在 android.content.Intent 中一共定义了20种不同的 flag,其中和 Task 紧密关联的有四种:

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP
在使用这四个 flag 时,一个 Intent 可以设置一个 flag,也可以选择若干个进行组合。

默认情况下,通过 startActivity() 启动一个新的 Activity,新的 Activity 将会和调用者在同一个 stack 中。但是,如果在传递给 startActivity() 的 Intent 对象里包含了 FLAG_ACTION_NEW_TASK,情况将发生变化,系统将为新的 Activity “寻找”一个不同于调用者的 Task。不过要找的Task 是不是一定就是 NEW 呢?如果是第一次执行,则这个设想成立,如果说不是,也就是说已经有一个包含此 Activity 的Task 存在,则不会再启动 Activity。

如果 flag 是 FLAG_ACTIVITY_CLEAR_TOP,同时当前的 Task 里已经有了这个 Activity,那么情形又将不一样。Android 不但不会启动新的 Activity 实例,而且还会将 Task 里 该 Activity 之上的所有 Activity 一律结束掉,然后将 Intent 发给这个已存在的 Activity。Activity 收到 Intent 之后,可以在 onNewIntent() 里做下一步的处理,也可以自行结束然后重新创建自己。如果 Activity 在 AndroidMainifest.xml 里将启动模式设置成multiple,– 默认模式,并且 Intent 里也没有设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将选择后者。否则,它将选择前者。FLAG_ACTIVITY_CLEAR_TOP 还可以和 FLAG_ACTION_NEW_TASK 配合使用。

如果 flag 设置的是 FLAG_ACTIVITY_SINGLE_TOP,则意味着如果 Activity 已经是运行在 Task 的 top,则该 Activity 将不会再被启动。


三、 intent的解析

在应用中,我们可以以两种形式来使用Intent:

-          直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。

-          间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。

         对于直接Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。

Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有<intent-filter>及其中定义的Intent,通过PackageManager(注:PackageManager能够得到当前设备上所安装的application package的信息) 来查找能过处理这个Intent的component。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方 法如下:

-          如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;

-          如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。

-          如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者 mailto: ) 进行匹配。同上,Intent 的scheme必须出现在目标组件的scheme列表中。

-          如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。


下面,以Android SDK中的便笺例子来说明,Intent如何定义及如何被解析。这个应用可以让用户浏览便笺列表、查看每一个便笺的详细信息。

Manifest.xml

Xml代码 复制代码 收藏代码
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2. package="com.google.android.notepad">  
  3.     <application android:icon="@drawable/app_notes"  
  4. android:label="@string/app_name">  
  5.     <provider class="NotePadProvider"  
  6. android:authorities="com.google.provider.NotePad" />  
  7.     <activity class=".NotesList"="@string/title_notes_list">  
  8.       <intent-filter>  
  9.         <action android:value="android.intent.action.MAIN"/>  
  10.         <category android:value="android.intent.category.LAUNCHER" />  
  11.       </intent-filter>  
  12.       <intent-filter>  
  13.         <action android:value="android.intent.action.VIEW"/>  
  14.         <action android:value="android.intent.action.EDIT"/>  
  15.         <action android:value="android.intent.action.PICK"/>  
  16.         <category android:value="android.intent.category.DEFAULT" />  
  17.         <type android:value="vnd.android.cursor.dir/vnd.google.note" />  
  18.       </intent-filter>  
  19.       <intent-filter>  
  20.         <action android:value="android.intent.action.GET_CONTENT" />  
  21.         <category android:value="android.intent.category.DEFAULT" />  
  22.         <type android:value="vnd.android.cursor.item/vnd.google.note" />  
  23.       </intent-filter>  
  24.     </activity>  
  25.     <activity class=".NoteEditor"="@string/title_note">  
  26.       <intent-filter android:label="@string/resolve_edit">  
  27.         <action android:value="android.intent.action.VIEW"/>  
  28.         <action android:value="android.intent.action.EDIT"/>  
  29.         <category android:value="android.intent.category.DEFAULT" />  
  30.         <type android:value="vnd.android.cursor.item/vnd.google.note" />  
  31.       </intent-filter>  
  32.       <intent-filter>  
  33.         <action android:value="android.intent.action.INSERT"/>  
  34.         <category android:value="android.intent.category.DEFAULT" />  
  35.         <type android:value="vnd.android.cursor.dir/vnd.google.note" />  
  36.       </intent-filter>  
  37.     </activity>  
  38.     <activity class=".TitleEditor"="@string/title_edit_title"  
  39. android:theme="@android:style/Theme.Dialog">  
  40.       <intent-filter android:label="@string/resolve_title">  
  41.         <action android:value="com.google.android.notepad.action.EDIT_TITLE"/>  
  42.         <category android:value="android.intent.category.DEFAULT" />  
  43.         <category android:value="android.intent.category.ALTERNATIVE" />  
  44.         <category android:value="android.intent.category.SELECTED_ALTERNATIVE"/>  
  45.         <type android:value="vnd.android.cursor.item/vnd.google.note" />  
  46.       </intent-filter>  
  47.     </activity>  
  48. </application>  
  49. </manifest> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.google.android.notepad"> 
    <application android:icon="@drawable/app_notes" 
android:label="@string/app_name"> 
    <provider class="NotePadProvider" 
android:authorities="com.google.provider.NotePad" /> 
    <activity class=".NotesList"="@string/title_notes_list"> 
      <intent-filter> 
        <action android:value="android.intent.action.MAIN"/> 
        <category android:value="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
        <action android:value="android.intent.action.VIEW"/> 
        <action android:value="android.intent.action.EDIT"/> 
        <action android:value="android.intent.action.PICK"/> 
        <category android:value="android.intent.category.DEFAULT" /> 
        <type android:value="vnd.android.cursor.dir/vnd.google.note" /> 
      </intent-filter> 
      <intent-filter> 
        <action android:value="android.intent.action.GET_CONTENT" /> 
        <category android:value="android.intent.category.DEFAULT" /> 
        <type android:value="vnd.android.cursor.item/vnd.google.note" /> 
      </intent-filter> 
    </activity> 
    <activity class=".NoteEditor"="@string/title_note"> 
      <intent-filter android:label="@string/resolve_edit"> 
        <action android:value="android.intent.action.VIEW"/> 
        <action android:value="android.intent.action.EDIT"/> 
        <category android:value="android.intent.category.DEFAULT" /> 
        <type android:value="vnd.android.cursor.item/vnd.google.note" /> 
      </intent-filter> 
      <intent-filter> 
        <action android:value="android.intent.action.INSERT"/> 
        <category android:value="android.intent.category.DEFAULT" /> 
        <type android:value="vnd.android.cursor.dir/vnd.google.note" /> 
      </intent-filter> 
    </activity> 
    <activity class=".TitleEditor"="@string/title_edit_title" 
android:theme="@android:style/Theme.Dialog"> 
      <intent-filter android:label="@string/resolve_title"> 
        <action android:value="com.google.android.notepad.action.EDIT_TITLE"/> 
        <category android:value="android.intent.category.DEFAULT" /> 
        <category android:value="android.intent.category.ALTERNATIVE" /> 
        <category android:value="android.intent.category.SELECTED_ALTERNATIVE"/> 
        <type android:value="vnd.android.cursor.item/vnd.google.note" /> 
      </intent-filter> 
    </activity> 
</application> 
</manifest>
  



例子中的第一个Activity 是com.google.android.notepad.NotesList,它是应用的主入口,提供了三个功能,分别由三个 intent-filter进行描述:
        1、第一个是进入便笺应用的顶级入口(action为android.app.action.MAIN)。类型为android.app.category.LAUNCHER表明这个Activity将在Launcher中列出。
        2、第二个是,当type为vnd.android.cursor.dir/vnd.google.note(保存便笺记录的目录) 时,可以查看可用的便笺(action为android.app.action.VIEW),或者让用户选择一个便笺并返回给调用者(action为 android.app.action.PICK)。
        3、第三个是,当type为vnd.android.cursor.item/vnd.google.note时,返回给调用者一个用户选择的便笺(action为android.app.action.GET_CONTENT),而用户却不需要知道便笺从哪里读取的。 有了这些功能,下面的Intent就会被解析到NotesList这个activity:

    * { action=android.app.action.MAIN }:与此Intent匹配的Activity,将会被当作进入应用的顶级入口。

    * { action=android.app.action.MAIN, category=android.app.category.LAUNCHER }:这是目前Launcher实际使用的 Intent,用于生成Launcher的顶级列表。

    * { action=android.app.action.VIEW data=content://com.google.provider.NotePad/notes }:显示"content://com.google.provider.NotePad/notes"下的所有便笺的列表,使用者可以遍历列表,并且察看某便笺的详细信息。

    * { action=android.app.action.PICK data=content://com.google.provider.NotePad/notes }:显示"content://com.google.provider.NotePad/notes"下的便笺列表,让用户可以在列表中选择一个,然后将选择的便笺的 URL返回给调用者。

    * { action=android.app.action.GET_CONTENT type=vnd.android.cursor.item/vnd.google.note }:和 上面的action为pick的Intent类似,不同的是这个Intent允许调用者(在这里指要调用NotesList的某个Activity)指定 它们需要返回的数据类型,系统会根据这个数据类型查找合适的 Activity(在这里系统会找到NotesList这个Activity),供用户选择便笺。


        第二个Activity是com.google.android.notepad.NoteEditor,它为用户显示一条便笺,并且允许 用户修改这个便笺。它定义了两个intent-filter,所以具有两个功能。第一个功能是,当数据类型为 vnd.android.cursor.item/vnd.google.note时,允许用户查看和修改一个便签(action为 android.app.action.VIEW和android.app.action.EDIT)。第二个功能是,当数据类型为 vnd.android.cursor.dir/vnd.google.note,为调用者显示一个新建便笺的界面,并将新建的便笺插 入到便笺列表中(action为android.app.action.INSERT)。

      有了这两个功能,下面的Intent就会被解析到NoteEditor这个activity:

    * { action=android.app.action.VIEW data=content://com.google.provider.NotePad/notes/{ID} } :向用户显示标识为 ID的便笺。

    * { action=android.app.action.EDIT data=content://com.google.provider.NotePad/notes/{ID} }:允许用户编辑标识为ID的便笺。

    * { action=android.app.action.INSERT data=content://com.google.provider.NotePad/notes }:在“content://com.google.provider.NotePad/notes”这个便笺列表中创建一个新的空便笺,并允许用 户编辑这个便签。当用户保存这个便笺后,这个新便笺的URI将会返回给调用者。


        最后一个Activity是com.google.android.notepad.TitleEditor,它允许用户编辑便笺的标题。它可以被实现为 一个应用可以直接调用(在Intent中明确设置component属性)的类,不过这里我们将为你提供一个在现有的数据上发布可选操作的方法。在这个 Activity的唯一的intent-filter中,拥有一个私有的action: com.google.android.notepad.action.EDIT_TITLE,表明允许用户编辑便笺的标题。和前面的view和edit 动作一样,调用这个Intent 的时候,也必须指定具体的便笺(type为vnd.android.cursor.item/vnd.google.note)。不同的是,这里显示和编 辑的只是便笺数据中的标题。
      除了支持缺省类别(android.intent.category.DEFAULT),标题编辑器还支持另外两个标准类别: android.intent.category.ALTERNATIVE和 android.intent.category.SELECTED_ALTERNATIVE。实现了这两个类别之后,其它 Activity就可以调用queryIntentActivityOptions(ComponentName, Intent[], Intent, int)查询这个Activity提供的action,而不需要了解它的具体实现;或者调用addIntentOptions(int, int, ComponentName, Intent[], Intent, int, Menu.Item[])建立动态菜单。需要说明的是,在这个intent-filter中有一个明确的名称(通过android:label= "@string/resolve_title"指定),在用户浏览数据的时候,如果这个Activity是数据的一个可选操作,指定明确的名称可以为用 户提供一个更好控制界面。
      有了这个功能,下面的Intent就会被解析到TitleEditor这个Activity:

    * { action=com.google.android.notepad.action.EDIT_TITLE data=content://com.google.provider.NotePad/notes/{ID} }:显示并且允许用户编辑标识为ID的便笺的标题。

***************************************************************************

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解Android Intent 的相关文章

  • ContentResolver的notifyChange方法是否也通知详细的Uri?

    在应用数据期间我使用notifyChange与Uri 假设我通知content com package my items 我还有详细的Activity显示数据来自content com package my items 1 是否通知 一般
  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • 需要使用手机后退按钮返回 Web 视图的帮助

    这是我的代码 package com testappmobile import android app Activity import android os Bundle import android view KeyEvent impor
  • 如何在android中压缩和解压png图像

    您好 在我的应用程序中 当我单击 zip 按钮时 我需要压缩图像文件 当我单击解压缩按钮时 我需要解压缩文件 我尝试使用下面的代码来压缩图像 但我的问题是当我单击 zip 按钮时 正在创建 zip 文件 但之后在使用 winzip 软件的系
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • Android:如何使用后台线程?

    我开发了一个应用程序 它从互联网获取内容并相应地在设备的屏幕上显示它 该程序运行得很好 就是有点慢 加载并显示内容大约需要 3 4 秒 我想将获取内容并将其显示在后台线程中的所有代码放在一起 当程序执行这些功能时 我想显示一个进度对话框 你
  • Google 地图删除标记路线上下文菜单

    我使用 Android Studio 的 Google 地图模板启动了一个新项目 并在地图上添加了一个标记 LatLng location new LatLng lat lng Marker marker mMap addMarker ne
  • 当不支持 Google Play 应用内结算 V.3 时

    在 Google Play 的应用内结算 V 3 中 有一个选项可以检查用户设备是否支持它 使用是否支持计费 http developer android com google play billing versions html meth
  • 在 Android Lollipop 中从 Uri 中裁剪照片后总是返回 Null?

    我尝试在拍照或挑选照片后从 Uri 中裁剪图像 我的代码是这样的 public static void cropImage Uri uri Activity activity int action code Intent intent ne
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • 如何在 NumberPicker 中一次显示 3 个以上的值

    我正在创建一个数字选择器 如下图所示 但如果有可用空间 我想显示 3 个以上的值 该选择器有 20 个项目 并且有足够的空间来显示 3 个以上的值 这可以使用 NumberPicker 来完成吗 只需以编程方式设置numberPicker
  • Emma 不生成coverage.ec

    我设置了艾玛 它曾经对我有用 然后我们更改了源代码 现在它没有生成coverage ec根本不 它确实生成coverage em 测试临近结束时 出现错误消息 exec INSTRUMENTATION CODE 0 echo Downloa
  • 来自相机的 MediaCodec 视频流方向和颜色错误

    我正在尝试流式传输视频捕获直接从相机适用于 Android 设备 到目前为止 我已经能够从 Android 相机捕获每一帧预览帧 byte data Camera camera 函数 对数据进行编码 然后成功解码数据并显示到表面 我用的是安
  • 如何从android中的外部存储中获取所选文件的文件路径?

    我在选择文件的文件路径时遇到问题 我搜索了整个堆栈溢出 但问题没有解决 从设备中选择文件的代码如下所示 Intent intent new Intent Intent ACTION GET CONTENT intent setType in
  • Android 纹理仅显示纯色

    我正在尝试在四边形上显示单个纹理 我有一个可用的 VertexObject 它可以很好地绘制一个正方形 或任何几何对象 现在我尝试扩展它来处理纹理 但纹理不起作用 我只看到一种纯色的四边形 坐标数据位于 arrayList 中 the ve
  • Android 中的列表视图分页

    我有一个列表视图 其中显示了 50 个元素 我决定对视图进行分页 以便视图的每个部分都有 10 个元素 然后单击 下一个 按钮以获取下一个 10 个元素 如何设置10个数据 我关注这篇文章http rakhi577 wordpress co
  • android textview 有字符限制吗?

    我正在尝试在 android TextView 中输入超过 2000 3000 个字符 它不显示任何内容 任何一份指南是否对 android textview 有字符限制或什么 我在G3中做了一些小测试 我发现 如果activtiy布局中有
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • Glass 语音命令给定列表中最接近的匹配项

    使用 Glass 您可以通过 确定 Glass 菜单启动应用程序 它似乎会选择最接近的匹配项 除非命令相距数英里 并且您可以明显看到命令列表 无论如何 是否可以从应用程序内或从语音提示 在初始应用程序触发后 给出类似的列表并返回最接近的匹配
  • Flash 对象未显示在phonegap android 中

    我已经在 android 手机间隙创建了一个应用程序 我有一个屏幕 我想显示一个静态 flash obj 所以我在屏幕 HTML 页面中放入了以下代码

随机推荐

  • android Activity LifeCycle

    android横竖屏切换时候的Activity LifeCycle 程序启动 01 23 18 33 47 711 I MainActivity 11233 gt onCreate 01 23 18 33 47 711 I MainActi
  • Java判断字符串是否为空的方法

    以下是 Java 判断字符串是否为空的几种方法 方法一 最多人使用的一个方法 直观 方便 但效率很低 方法二 比较字符串长度 效率高 是我知道的最好一个方法 方法三 Java SE 6 0 才开始提供的办法 效率和方法二基本上相等 但出于兼
  • 64位windows7的安装和系统分区扩展

    今天哥带来一台HASEE笔记本 xff0c 2G内存 xff0c i3处理器 xff0c 300G的硬盘 xff0c 让我装一个64位的windows7 因为只有安装64位的系统才能发挥出64位硬件的性能 xff0c 否则真是浪费硬件性能资
  • 汇编语言Assembly Language

    想念wangfeng老师 xff0c 他将深奥的汇编语言解析的是那么透彻明白 xff0c 身为学生的我真的受益良多 字符 十六进制ASCII 0 9 30h 39h A Z 41h 5ah a z 61h 7ah 逻辑运算 xff1a 与
  • SVN的使用

    1 Attempted to lock an already locked dir svn Working copy 39 x mywork project res layout 39 locked 原因 xff1a 产生这种情况大多是因为
  • 注册表文件的编写

    Windows 中的注册表文件 xff08 system dat和 user dat xff09 是 Windows 的核心数据库 xff0c 因此 xff0c 对 Windows 来说是非常重要的 通过修改注册表文件中的数据 xff0c
  • ASP.NET网站安装部署,加入注册码验证等等

    最近通过自己实践 xff0c 完成了ASP NET网站安装部署 xff0c 实现了SQL打包 xff0c 实现了配置文件的打包等等 xff0c 并实现了注册码的验证等等 xff0c 如有需要请跟帖 xff0c 留下联系方式
  • Windows使用经验收集

    19 最快的编辑任意网页代码 打开浏览器 xff0c 浏览一个网页 xff0c 按下F12打开开发人员工具 xff0c 然后点击console xff0c 也就是控制台 xff0c 输入 document body contentEdita
  • 如何提高自己的编程能力

    原帖地址 xff1a http www blogjava net xvridan archive 2007 02 17 100143 html 1 扎实的基础 数据结构 离散数学 编译原理 xff0c 这些是所有计算机科学的基础 xff0c
  • 排序算法学习

    61 61 61 冒泡排序 61 61 61 JAVA语言实现 学习冒泡排序 冒泡排序 xff08 Bubble Sort xff0c 台湾译为 xff1a 泡沫排序或气泡排序 xff09 是一种简单的排序算法 它重复地走访过要排序的数列
  • Android的Activity屏幕切换动画(二)-左右滑动深入与实战

    原帖 xff1a http www oschina net question 97118 34523 上一篇文章讲了 Android的左右滑动切换 xff0c 实现过程是非常简单 xff0c 一些新手可能会向深入了了解Activity切换的
  • Android 第三方 UI 库 GreenDroid 使用方法

    原帖地址 xff1a http www acwind net blog p 61 1297 一直觉得 Android SDK 本身提供的界面 UI 库实在是太难看了 xff0c 而且提供的功能也总是这里那里很多缺憾 所以一直在关注各种第三方
  • android视野慢慢开阔

    1 umeng 友盟移动开发者服务平台 http www umeng com 原来是分析用户的 xff0c 长见识了 友盟统计分析3 0 用更精细的数据读懂用户 服务超过30 000开发者 100 000款APP xff0c 日启动次数15
  • HTC G7 desire刷机和小米4刷原生安卓

    步骤 1 root 2 安装recovery recovery img文件 http down10 zol com cn shouji recovery clockwork 2 5 0 1 bravo slcd img reflash文件
  • java一些疑问的求证和遇到的问题

    100 关于byte array 有一个字符串s xff0c 输出字符对应的unicode十进制和十六进制 getBytes 貌似获取每个字符的8位二进制的字节 xff1b 输出字节的十六进制形式的字符串验证后确实是 String s 61
  • Java基础

    Java语言的一些基础知识 xff0c 需要常记在心 xff0c 但是好记性不如烂笔头 就记在这吧 final 修饰的变量不能被赋值 xff0c 可以在定义的同时赋值 final 修饰的方法可以被继承 xff0c 不能被重写override
  • Java EE学习

    遇见的问题 servlet访问出现404 xff0c jsp正常访问 java jdk1 8 eclipse2018 12 4 10 0 Dynamic web module version 4 0 Tomcat9 0 经过一番搜索 xff
  • 手把手教你Asp.net三层架构

    首先简单介绍下三层乃至多层架构 xff08 高手跳过 xff09 xff1a BLL 就是business Logic laywer xff08 业务逻辑层 xff09 他只负责向数据提供者也就是DAL调用数据 然后传递给客户程序也就是UI
  • 深奥的补码

    上学的时候汇编语言中有原码 反码 补码 考试的时候经常考 xff0c 比较好的办法就是记住他们的转换规则 xff0c 但是虽然记住转换规则 xff0c 考试也考不差 xff0c 心头却始终有朵乌云挥之不去 xff0c 令人异常纠结 xff0
  • 详解Android Intent

    一 Intent 作用 Intent被译作意图 xff0c 其实还是很能传神的 xff0c Intent期望做到的 xff0c 就是把实现者和调用者完全解耦 xff0c 调用者专心将以意图描述清晰 xff0c 发送出去 xff0c 就可以梦