精华内容
下载资源
问答
  • 使用Intent启动组件

    千次阅读 2014-06-16 22:41:46
    android应用程序的三大组件——Activities、Services、Broadcast Receiver,通过消息触发,这个消息就是Intent,中文又翻译...本文来看一下怎么使用Intent启动组件,以及Intent的过滤规则。 Intent对象 首先来看

    android应用程序的三大组件——Activities、Services、Broadcast Receiver,通过消息触发,这个消息就是Intent,中文又翻译为"意图"(我感觉读着不顺畅,还是读英文)。我们可以通过Intent去启动三大组件,并且通过Intent携带数据到其他组件中。本文来看一下怎么使用Intent启动组件,以及Intent的过滤规则。

    Intent对象

    首先来看Intent对象中包含的成员。

    private String mAction;   //动作
    private Uri mData;          //数据
    private String mType;
    private String mPackage;   //包名
    private ComponentName mComponent;  //组件名 包含程序包名+类名,以及应用包名
    private int mFlags;            //标志
    private HashSet<String> mCategories;   //种类
    private Bundle mExtras;    //附加信息
    private Rect mSourceBounds;
    private Intent mSelector;
    private ClipData mClipData;

    看Intent的源码,主要包含以上成员。

    Intent解析

    Intent解析有两种方式:显式解析和隐式解析。

    显式解析,我们直接传组件进入,打开这个指定的组件,比较简单,通常应用程序内使用。
    比如我们创建一个显式的Intent:

    Intent intent = new Intent(context, OtherActivity.class);

    隐式解析,没有指定具体的组件,通过规则去匹配组件。通常用于多个程序之间的互相调用比较多。我们使用隐式解析式,action、data(包括URI和数据类型)、category都必须有。比如我们启动浏览器去打开一个网址,intent可以这样创建:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://blog.isming.me"));

    上面没有填写category,创建Intent的时候会自动填写为default。

    等待补充吧。

    乱扯

    好吧,本来像,会写的很长的,但是真正想写的时候,发现就这么简单,也没什么好写的。下次多看看源码,再看有没有要补充的。就酱紫了!

    原文地址:http://blog.isming.me/blog/2014/06/15/use-intent-start-component/,欢迎转载,转载请注明出处。

    展开全文
  • Intent实现组件之间通信1、Intent定义 Intent是一个消息传递对象,通过...2、Intent实现组件之间通信的三种基本方式 1、启动Activity (1)通过startActivity()的形式,Intent还可能携带少量供所启动Activity使用的数据

    1、Intent定义

        Intent是一个消息传递对象,通过Intent可以从其他应用组件请求操作。也就是说Intent(意图)是Android四大组件的通信桥梁。
    

    2、Intent实现组件之间通信的三种基本方式

    1、启动Activity
    (1)通过startActivity()的形式,Intent还可能携带少量供所启动Activity使用的数据
    Intent itent = new Intent(this,SecondActivity.class);
    intent.putExtra(Intent.EXTRA_EMALL,recipientArray);
    startActivity(intent);

    (2)通过startActivityForResult()的形式,这种方式要在 Activity 的 onActivityResult() 回调中
    举个栗子:有如下需求,用户要在某个时刻去获得联系人中的一个联系人

        private void pickContact() {
        Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT_REQUEST);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //如果请求没有异常,并且requestCode是PICK_CONTACT_REQUEST
        if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
           //在这里查询联系人的content provider并实现自己想要的功能
    }

    2、启动 Service
    Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。
    ps:为了安全性,启动Service的时候,要始终使用显示Intent,而且不能为Service声明Intent-filter。从Android 5.0(API级别21)开始,使用隐式Intent调用bindService(),系统会发生异常。

    3、传递广播
    Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。


    3、Intent的主要属性

    1、ComponentName(组件名称)
    指的就是目标组件的名称,由包名+组件全限定类名组成,只有在显示Intent中才需要指定ComponentName;

    ComponentName componentName = new(MainActivity.this,SecondActivity.class);
    Intent intent = new Intent();
    intent.setComponent(componentName);
    //在本质上和下面的语句是等价的
    Intent intent = new Intent(MainActivity.this,SecondActivity.class);

    2、Action(操作)
    指定要执行的通用操作的字符串。这个“操作”往往是抽象的,至于哪个组件来完整就要交给Intent-filter来筛选了
    ps: 在Java中的Action和Intent-filter中的格式是不一样的

    intent.setAction(Intent.CALL_ACTION);

    3、Data(数据)
    引用待操作数据和/或该数据 MIME 类型的 URI(Uri 对象)。创建 Intent 时,除了指定 URI 以外,指定数据类型(其 MIME 类型)往往也很重要。例如,能够显示图像的 Activity 可能无法播放音频文件。因此,指定数据的 MIME 类型有助于 Android 系统找到接收 Intent 的最佳组件。但有时,MIME 类型可以从 URI 中推断得出,特别当数据是 content: URI 时尤其如此。这表明数据位于设备中,且由 ContentProvider 控制,这使得数据 MIME 类型对系统可见。

    要仅设置数据 URI,请调用 setData()。Data的URI对象格式:scheme://host:port/path
    要仅设置 MIME 类型,请调用 setType()。只要是xxx/xxx的格式就行。
    在Java代码中同时调用上述函数,会相互覆盖,可以使用 setDataAndType() 同时显式设置二者。
    在AndroidManifest.xml中,着两个属性都是在data标签中的:

    4、显式Intent和隐式Intent比较

    显式Intent:
    要通过显式的指定组件名来启动组件startActivity(MainActivity.this,SecondActivity.class);第一个参数是Context上下文,第二个参数就是组件名,每次只能指定一个。
    核心代码:

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));
    startActivity(intent);

    这里写图片描述

    隐式Intent:
    通过为Intent指定的Action,Data和Category属性,逐个匹配AndroidManifest.xml相关组件的Intent-filter,只有一个满足时,就跳转;多个满足时,就弹出对话框进行选择。
    栗子:
    MainActivity中的核心代码:

     Intent intent = new Intent();
     intent.setAction("my_action");
     intent.addCategory("my_category");
     startActivity(intent);

    SecondActivity中的intent-filter

    <intent-filter>
         <action android:name="my_action"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <category android:name="my_category"/>
    </intent-filter>
    展开全文
  • Intent启动Activity 1. 显示意图启动:明确告诉激活哪个组件(一般用在激活的组件是当前的应用程序中的)  传递数据  Intent intent=new Intent(OneActivity.this,TwoActivity.class);  intent....

    Intent启动Activity

    1. 显示意图启动:明确告诉激活哪个组件(一般用在激活的组件是当前的应用程序中的)

          传递数据

     Intent intent=new Intent(OneActivity.this,TwoActivity.class);

     intent.putExtra("key",value) //将数据保存到intent中

     startActivity(intent);​

    接收数据

    在另外一个activity中直接getIntent获取intent,再通过intent.getStringExtra("key").就可以获取到值.


    2.隐示意图启动:通过action.data,category等信息去告诉系统激活哪个组件.(一般用在激活的组件是在其他的应用程序中)

            <1.配置隐式意图激活的信息(在Manifast中注册的时候配置action,data,category)    

    <activity android:name=".MainActivity">   
        <intent-filter >      
        <action android:name="com.example.demo"></action>    
        <category android:name="android.intent.category.DEFAULT"></category>   
    </intent-filter>

    </activity>​  

    <2.激活隐式意图

    Intent intent=new Intent(); 
    intent.setAction("com.example.demo");  //
    intent.addCategory("android.intent.category.DEFAULT");  //
    intent.setDataAndType(Uri data,String type); //
    startActivity(intent);​

    例: 隐式意图启动浏览器

          1.浏览程序中注册

    <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:scheme="about" />
            <data android:scheme="javascript" />
        </intent-filter>

    2.启动方式

    Intent intent = new Intent();
    intent.setAction("android.intent.action.MAIN");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addCategory("android.intent.category.BROWSABLE");
    intent.setData(Uri.parse("https://www.baidu.com")); 
    startActivity(intent);

    Activity之间数据的传递

    传递数据:

    Intent intent=new Intent(this,three.class);
    intent.putExtra​("key",value);
    startActivity(intent);​ 

    获取数据:

    Intent intent=getIntent();
    intent.getStringExtra("key");​​ 


    startActivityForResult的使用,传递数据

       1.oneActivity中代码

             <1.发送有返回值的意图

    Intent intent = new Intent(MainAcitvity.this,RequestActivity.class);  
    //发送意图标示为REQUSET=1  
    startActivityForResult(intent, REQUSET);  ​

    <2.接受返回的结果

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            super.onActivityResult(requestCode(请求码), resultCode(返回码), data(数据));  
            //requestCode标示请求的标示   resultCode表示有数据  
            if (requestCode == MainAcitvity.REQUSET && resultCode == RESULT_OK) {
            data.getStringExtra(RequestActivity.KEY_USER_ID)}
    }  ​

       2.twoActivity中代码

    Intent intent=new Intent();  
    intent.putExtra(KEY_USER_ID, et01.getText().toString());  
    intent.putExtra(KEY_USER_PASSWORD, et02.getText().toString());  
    setResult(RESULT_OK, intent);  
    finish();  ​



    展开全文
  • (二)启动组件intent

    当有一个来自于content resolver的请求指向Content provider时,content provider启动,其他的三个组件(Activity,service,broadcast receiver)是通过一个叫做intent的异步的消息来启动的,一个intent持有一个message的内容,对Activity和 service来说,他是一个被要求的动作(action)和在该动作上的数据的URI,对broadcast receiver来说,intent对象是一个被广播的动作。

    针对每种组件分别有对应的方法来启动它:

    (1)一个 Activity是通过传递一个Intent对象到Context.startActivity()或者 Activity.startActivityForResult()来启动的(或者去做一些新的任务),被启动的这个Activity可以通过 getIntent()来获得导致他启动的那个intent的。

    (2)一个service是通过传递一个Intent对象到 Context.startService()来启动的(或者给一些新的命令给正在运行的service),android调用service的 onStart()方法,并且把Intent对象传递给他,同样的,一个Intent可以传递到Context.bindService()方法里来建立 一个介于正在运行的service和调用他的组件之间的连接,这个service通过onBind()方法来接收这个Intent对象,(如果这个 service还没有运行,bindservice()能选择性的启动它),在后面的部分,关于绑定service的更多详细的信息请查看远程调用。

    (3)一个应用可以通过传递一个Intent对象给像Context.sendBroadcast(), Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()这样的方法来开始一个广播,android通过调用对应的onReceive()方法将 intent传递给所有对这个广播感兴趣的broadcast receiver。

     

    转载自http://www.gphans.com/book/20100731948

    展开全文
  • 通过 intent 启动 Activity Intent 种类 Exported 属性 Category 总结 Explicit Intent 启动 Activity Implicit Intent 启动Activity通过 intent 启动 ActivityIntent 种类 Intent 有两种: Explicit intents ...
  • Intent组件

    千次阅读 2011-07-05 09:25:00
    Intent是Android中的重要组件,可以被认为是不同组件之间通信的“媒介”或者“信使”。使用它可以启动Activity,Service还可以发起一个广播(Broadcast)。Intent对象由Action、Data、Category、Component
  • 使用Intent启动Activity

    2013-12-03 13:58:33
    Intent的最常用的用途是绑定应用程序组件Intent用来在应用程序的Activity间启动、停止和传输。  这一章节中关于启动新的Activity的提示,也同样适用于Service。第8章可以了解到关于启动(和创建)Service的细节...
  • Android Intent组件

    2014-03-16 19:06:00
    Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”。  目标组件一般要通过Intent来声明自己的条件,一般通过组件中的元素来过滤。  Intent在由以下几个部分组成:动作...
  • Intent

    2015-03-15 19:53:54
    使用Intent启动组件的优势 1, Intent为组件的启动提供了一致的编程模型。无论想要启动的组件是Activity,Service, 还是BroadcastReceiver,都可以使用Intent封装启动的意图。 2, 在某些时候, 应用程序只
  • Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”。 目标组件一般要通过Intent来声明自己的条件,一般通过组件中的&lt;intent-filter&gt;元素来过滤。 ...
  • android Intent启动flag

    万次阅读 2013-10-30 14:47:09
    如果设置这个标记,Intent的接受者将会被赋予读取Intent中URI数据的权限和lipData中的URIs的权限。当应用与Intent的ClipData时,所有的URIs和data的所有递归遍历或者其他Intent的ClipData数据都会被授权。 FLAG_...
  • 一般用于启动Activity、启动服务、发送广播 (承担三大组件之间的通信)启动组件常用方法对Activity ——–》startActivity(Intent intent) / startActivityForResult(Intent intent)对service —
  • intent组件间的桥梁

    2016-03-19 18:32:00
    component name 组件名 指定启动组件的名字,一般用于一个应用内部的显示启动  category 种类 没有指定则为默认default action 动作 指定将要启动的应用将要做什么 例如打电话 一般用于进程间通讯,隐
  • Android--Intent启动活动

    2016-03-13 16:40:36
    本文承接Android Studio–使用Toast一、概述Intent可以进行各组件之间的交互,不仅可以指明当前组件想要执行的操作,还可以在不同的组件之间传递数据。Intent一般可被用于启动活动、启动服务、以及发送广播等场景,...
  • 一、Intent简介   Intent是四大组件间的枢纽,Android通信的桥梁。...Intent封装了程序想要启动或触发目标组件的信息,其还可用于被启动组件交换信息。       二、Intent类型 1.显式Intent   通过组件名明...
  • Intent 启动模式

    千次阅读 2012-03-08 13:05:54
    FLAG_ACTIVITY_BROUGHT_TO_FRONT: 这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。...若Intent对象包含FLAG_ACTIVITY_CLEAR_TOP标志,并且在目标任务栈中
  • Intent显式启动和隐式启动

    千次阅读 2015-12-22 11:03:38
    众所周知 Android组件启动模式有两种 显式调用和隐式调用,这两种调用方式从字面意思就很好理解,显式调用需要指定被启动组件比如:Intent i= new Intent(); i.setClass(this,SecondActivity.class); start...
  • IntentIntent filter

    2014-09-25 11:46:44
    使用Intent启动组件的优势 1, Intent为组件的启动提供了一致的编程模型. 无论想要启动的组件是Activity, Service, 还是BroadcastReceiver, 都可以使用Intent封装启动的意图. 2, 在某些时候, 应
  • Activity的启动模式 和 Intent启动选项

    千次阅读 2016-12-15 16:32:41
    启动模式允许开发者定义一个activity的新实例如何与当前的Task关联。可以定义使用俩种方法来定义。 如果Activity A开启Activity B, Activity B就可以在它的manifest文件中定义它与当前的task如何关联,Activity A也...
  • Android中Intent组件详解

    千次阅读 2014-05-04 16:30:51
    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件。Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作、与动作有关的数据等。...
  • intentintent-filter

    2014-11-05 11:17:59
    使用Intent启动组件的优势 1, Intent为组件的启动提供了一致的编程模型. 无论想要启动的组件是Activity, Service, 还是BroadcastReceiver, 都可以使用Intent封装启动的意图. 2, 在某些时候, 应
  • 使用隐式Intent启动其他APP

    千次阅读 2017-09-14 20:31:31
    Android的最重要功能之一就是APP能够根据“Action”跳转到另一个APP。例如,如果您希望在地图上显示出您APP中的商家地址,则您不必...您可以用显式Intent实现APP内各Activity之间的切换,显式Intent定义了要启动的目...
  • Android Intent组件使用

    千次阅读 2013-06-19 13:54:00
    Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”。  目标组件一般要通过Intent来声明自己的条件,一般通过组件中的元素来过滤。  Intent在由以下几个部分组成:动作...
  • Intent组件--属性说明

    2017-05-31 16:46:24
    Intent是Android中的重要组件,可以被认为是不同组件之间通信的“媒介”或者“信使”。使用它可以启动Activity,Service还可以发起一个广播(Broadcast)。... 在使用Intent显式的启动目标组件时,需要指定组件
  • 一些在Android中常用的Intent启动服务,当执行startActivity时候,Android将会根据Intent绑定的信息寻找最合适的启动程序来接应,并执行程序以完成意图的实现。 打开浏览器显示网页: Uri uri = Uri....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,493
精华内容 20,597
关键字:

intent启动组件