intent 订阅
Intent(意图)主要是解决Android应用的各项组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给被调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。 展开全文
Intent(意图)主要是解决Android应用的各项组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给被调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
信息
作    用
解决Android应用各项组件的通讯
提供信息
组件互相调用的相关信息
实现目的
调用者与被调用者之间的解耦
中文名
意图
性    质
媒体中介
外文名
intent
intent术语解释
在Android参考文档中,对Intent的定义是执行某操作的一个抽象描述(确实很抽象)。我们先来看看这里的抽象描述,到底描述了什么。首先,是要执行的动作(action)的一个简要描述,如VIEW_ACTION(查看)、EDIT_ACTION(修改)等,Android为我们定义了一套标准动作:MAIN_ACTIONVIEW_ACTIONEDIT_ACTIONPICK_ACTIONGET_CONTENT_ACTIONDIAL_ACTIONCALL_ACTIONSENDTO_ACTIONANSWER_ACTIONINSERT_ACTIONDELETE_ACTIONRUN_ACTIONLOGIN_ACTIONCLEAR_CREDENTIALS_ACTIONSYNC_ACTIONPICK_ACTIVITY_ACTIONWEB_SEARCH_ACTION此外,我们还可以根据应用的需要,定义我们自己的动作,并可定义相应的Activity来处理我们的自定义动作。其次,是执行动作要操作的数据(data),Android中采用指向数据的一个URI来表示,如在联系人应用中,一个指向某联系人的URI可能为:content://contacts/1。这种URI表示,通过 ContentURI这个类来描述,具体可以参考android.net.ContentURI类的文档。以联系人应用为例,以下是一些action / data对,及其它们要表达的意图:VIEW_ACTION content://contacts/1-- 显示标识符为"1"的联系人的详细信息EDIT_ACTION content://contacts/1-- 编辑标识符为"1"的联系人的详细信息VIEW_ACTION content://contacts/-- 显示所有联系人的列表PICK_ACTION content://contacts/-- 显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父activity。例如:电子邮件客户端可以使用这个Intent,要求用户在联系人列表中选择一个联系人另外,除了action和data这两个重要属性外,还有一些附加属性:category(类别),被执行动作的附加信息。例如 LAUNCHER_CATEGORY 表示Intent 的接受者应该在Launcher中作为顶级应用出现;而ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个,这些动作可以在同一块数据上执行。type(数据类型),显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。component(组件),指定Intent的的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。总之,action、 data/type、category和extras 一起形成了一种语言。这种语言使系统能够理解诸如“查看某联系人的详细信息”之类的短语。随着应用不断的加入到系统中,它们可以添加新的action、 data/type、category来扩展这种语言。应用也可以提供自己的Activity来处理已经存在的这样的“短语”,从而改变这些“短语”的行为。
收起全文
精华内容
参与话题
问答
  • Intent 简介与详解

    千次阅读 2017-12-30 23:31:18
    1.Intent作用Intent是一个将要执行的动作的抽象的描述,解决Android应用的各项组件之间的通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的...

    1.Intent作用

    Intent是一个将要执行的动作的抽象的描述,解决Android应用的各项组件之间的通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。intent主要用来启动activity或者service(并携带需要传递的参数信息)。

    2.Intent形式

    意图包括:Action(动作),Category(附加信息),Data(数据,具体内容),Tpye(类型)等等,举个例子,说白了意图就是启动一个组件的完整的动作信息,就像打人,打就是Action动作,人就是Data内容,而Type就是类型,打什么人呢?打坏人,type就是坏人的类型,只有这些信息全了才能执行一个完整的意图,当然还有一些信息,比如scheme就是URI类型的数据的前缀,还有host主机名,path路径等。

    • (1).显式意图(Explicit Intents)

      • 调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
        
        //  1.创建Intent实例化对象几种方式  
        Intent intent = new Intent();  
        // 跳转到与该工程下的(同一个Application中的)activity或者service
        intent.setClass(Context packageContext, Class<?> cls) ;           // 跳转到不同Applicaiton的activity或者service
        intent.setClassName(Context packageContext, String className) ;   
        //内部调用setComponent(ComponentName),可以激活外部应用    
        intent.setComponent(new ComponentName(this, Class<?> cls));  
        intent.setComponent(new ComponentName(this, "package Name"));  
        
    • (2).隐式意图(Implicit Intents)
      • 没有明确指定组件名的Intent为隐式意图。系统会根据隐式意图中设置的 动作(action)、类别(category)、数据URI等来匹配最合适的组件。
      • 1).action:
      • The general action to be performed, such as ACTION_VIEW, ACTION_EDIT, ACTION_MAIN, 包括Android 系统指定的 和 自定义的
    intent.setAction("com.baidu.action.TEST"); 
    <action android:name="com.baidu.action.TEST"/>  
    • 2).data
      • expressed as a Uri, The data to operate on, such as a person record in the contacts database.
    Action Data(Uri) Content
    ACTION_VIEW content://contacts/people/1 Display information about the person whose identifier is “1”.
    ACTION_VIEW tel:123 Display the phone dialer with the given number filled in.
    ACTION_DIAL tel:123 Display the phone dialer with the given number filled in.
    intent.setData(Uri.parse("baidu://www.baidu.com/news"));  
    <!-- android:path 内容字符串需要以 / 开头 -->  
    <data android:scheme="baidu" android:host="www.baidu.com" android:path="/news"/>  
    • 3).category

      • Gives additional information about the action to execute.
      • 注意:项目清单的xml文件意图过滤器中必须指定 android.intent.category.DEFAULT类别,Activities will very often need to support the CATEGORY_DEFAULT so that they can be found by Context.startActivity,or Context can’t the acitivity component

        intent.addCategory("com.baidu.category.TEST");  
        <!-- 必须指定CATEGORY_DEFAULT,只有这样startActivity(intent)才能找到 -->  
        <category android:name="com.baidu.category.TEST" />  
        <category android:name="android.intent.category.DEFAULT" />  
    • 4).type

      • Specifies an explicit type (a MIME type) of the intent data.

        intent.setType("image/jpeg");  
        <data android:mimeType="image/*" />  
      • 注意:Java文件中data Uri 和 type不能同时使用各自的函数进行设定,因为使用type时会把Uri清除掉,可以使用setDataAndType方法设定

        intent.setDataAndType(Uri.parse("baidu://www.baidu.com/news"), "image/jpeg");  
    <data android:mimeType="image/*" android:scheme="baidu" android:host="www.baidu.com" android:path="/news"/>  
    • (3).两者的使用区别

      • 显式意图一般在应用的内部使用,因为在应用内部已经知道了组件的名称,直接调用就可以了。
        当一个应用要激活另一个应用中的Activity时,只能使用隐式意图,根据Activity配置的意图过滤器建一个意图,让意图中的各项参数的值都跟过滤器匹配,这样就可以激活其他应用中的Activity。所以,隐式意图是在应用与应用之间使用的。

    3.Activity的Intent数据传递

    //Activity间的数据传递  
    //  1.直接向intent对象中传入键值对(相当于Intent对象具有Map键值对功能)  
    intent.putExtra("first", text1.getText().toString());  
    intent.putExtra("second", text2.getText().toString());  
    
    //  2.新建一个Bundle对象 ,想该对象中加入键值对,然后将该对象加入intent中  
    Bundle bundle = new Bundle();  
    bundle.putString("first", "zhang");  
    bundle.putInt("age", 20);  
    intent.putExtras(bundle);  
    
    //  3.向intent中添加ArrayList集合对象  
    intent.putIntegerArrayListExtra(name, value);  
    intent.putIntegerArrayListExtra(name, value);     
    
    //  4.intent传递Object对象(被传递的对象的类实现Parcelable接口,或者实现Serialiable接口)  
    public Intent putExtra(String name, Serializable value)  
    public Intent putExtra(String name, Parcelable value)   

    4.Activity退出的返回结果

    //  1.通过startActivityForResult方式启动一个Activity  
    MainActivity.this.startActivityForResult(intent, 200);  //intent对象,和  requestCode请求码  
    
    //  2.新activity设定setResult方法,通过该方法可以传递responseCode 和 Intent对象  
    setResult(101, intent2);                                //responseCode响应码 和 intent对象  
    
    //  3.在MainActivity中覆写onActivityResult方法,新activity一旦退出,就会执行该方法  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        Toast.makeText(this, data.getStringExtra("info")+"requestCode:"+requestCode+"resultCode:"+resultCode, Toast.LENGTH_LONG).show();  
    }  

    5.设置IntentFilter当前应用打开(应用多选)

    <activity  
        android:name="com.example.player.MainActivity"  
        android:label="@string/app_name" >  
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  
    
            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    
        <!-- 指定action, data类型为video, category为default,设置完成之后,当打开video文件时,本应用作为可选打开软件 -->  
        <intent-filter>  
            <action android:name="android.intent.action.VIEW" />  
    
            <data android:mimeType="video/*" />  
    
            <category android:name="android.intent.category.DEFAULT" />  
        </intent-filter>  
    </activity>  

    使用隐式意图启动系统短信,并给指定号码发送信息

    /** 
         * 隐式意图的方法启动系统短信 
         *  
         * 简单概括就是: 意图包括:Action(动作),Category(附加信息),Data(数据,具体内容),Tpye(类型)等等,举个例子, 
         * 说白了意图就是启动一个组件的的完整的动作信息 
         * ,就像打人,打就是Action动作,人就是Data内容,而Type就是类型,打什么人呢?打坏人,type就是坏指的类型 
         * ,只有这些信息全了才能执行一个完整的意图 
         * ,当然还有一些信息,比如scheme就是URI类型的数据的前缀,就像这个例子当中的sms:,还有host主机名,path路径等 
         *  
         * @param view 
         */  
        public void startOne(View view) {  
            Intent intent = new Intent();  
            intent.setAction("android.intent.action.SENDTO");// 发送信息的动作  
            intent.addCategory("android.intent.category.DEFAULT");// 附加信息  
            intent.setData(Uri.parse("sms:10086"));// 具体的数据,发送给10086  
            startActivity(intent);  
        }  
    • 自定义的隐式意图调用:
      • 首先是先在清单文件中进行注册:
    <?xml version="1.0" encoding="utf-8"?>  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        package="net.loonggg.intent"  
        android:versionCode="1"  
        android:versionName="1.0" >  
    
        <uses-sdk  
            android:minSdkVersion="8"  
            android:targetSdkVersion="17" />  
    
        <application  
            android:allowBackup="true"  
            android:icon="@drawable/ic_launcher"  
            android:label="@string/app_name"  
            android:theme="@style/AppTheme" >  
            <activity  
                android:name="net.loonggg.intent.MainActivity"  
                android:label="@string/app_name" >  
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />  
    
                    <category android:name="android.intent.category.LAUNCHER" />  
                </intent-filter>  
            </activity>  
            <activity android:name="net.loonggg.intent.SecondActivity" >  
                <intent-filter>  
    
                    <!-- 自定义的动作 -->  
                    <action android:name="net.loonggg.xxx" />  
                    <!-- 自定义的scheme和host -->  
                    <data  
                        android:host="www.baidu.com"  
                        android:path="/person"  
                        android:scheme="loonggg" />  
                    <!-- 自定义的类型 -->  
                    <data android:mimeType="person/people" />  
                    <!-- 附加信息 -->  
                    <category android:name="android.intent.category.DEFAULT" />  
                </intent-filter>  
            </activity>  
        </application>  
    
    </manifest>  
    • 自定义设置的Activity:
    <activity android:name="net.loonggg.intent.SecondActivity" >  
               <intent-filter>  
    
                   <!-- 自定义的动作 -->  
                   <action android:name="net.loonggg.xxx" />  
                   <!-- 自定义的scheme和host -->  
                   <data  
                       android:host="www.baidu.com"  
                       android:path="/person"  
                       android:scheme="loonggg" />  
                   <!-- 自定义的类型 -->  
                   <data android:mimeType="person/people" />  
                   <!-- 附加信息 -->  
                   <category android:name="android.intent.category.DEFAULT" />  
               </intent-filter>  
           </activity>  
    • 代码调用自定义
    /** 
     * 通过自定义的隐式意图启动 
     *  
     * @param view 
     */  
    public void startTwo(View view) {  
        Intent intent = new Intent();
        intent.setAction("net.loonggg.xxx");         
        intent.addCategory("android.intent.category.DEFAULT");  
        intent.setDataAndType(Uri.parse("loonggg://www.baidu.com/person"),  
        "person/people");  
        startActivity(intent);  
    }  

    注意:

    intent.setData(data)和intent.setType(type)注意这两个方法会互相清除,意思就是:如果先设置setData(data)后设置setType(type),那么后设置的setType(type)会把前面setData(data)设置的内容清除掉,而且会报错,反之一样,所以如果既要设置类型与数据,那么使用setDataAndType(data,type)这个方法。

    展开全文
  • 安卓——Intent(实现页面跳转的两种方法)

    万次阅读 多人点赞 2018-02-27 17:35:00
    下图中两个不同的方法就是两种页面之间跳转的情况1&gt;跳转不返回数据2&gt;跳转返回数据实例:第一种启动方式(跳转不返回数据)第二种启动方式(跳转返回数据)先看第一种:点击第一种...下面是所有代码An...


    下图中两个不同的方法就是两种页面之间跳转的情况

    1>跳转不返回数据

    2>跳转返回数据



    实例:

    第一种启动方式(跳转不返回数据)

    第二种启动方式(跳转返回数据)

    先看第一种:


    点击第一种启动方式按钮会出现右边的图,然后再点击Button按钮返回左边的界面,TextView中的内容没变。

    再看第二种启动方式

    不同的是,点击Button按钮返回左边的界面,TextView中的内容变成了你好。



    下面是所有代码

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.lenovo.intent">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
    
            </activity>
            <activity android:name="com.example.lenovo.intent.firstactivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="com.example.lenovo.intent.Secondactivity">
    
            </activity>
        </application>
    
    </manifest>

    factivity

    <?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"
        >
    
        <Button
            android:id="@+id/bt1__first"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="第一种启动方式" />
    
        <Button
            android:id="@+id/bt2__second"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="第二种启动方式" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="吧第二个页面回传的数据显示出来" />
    
    </LinearLayout>
    

    sactivity

    <?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">
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button" />
    </LinearLayout>
    

    firstactivity.java

    package com.example.lenovo.intent;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    /**
     * Created by lenovo on 2018/2/27.
     */
    
    public class firstactivity extends Activity {
        private Button bt1;
        private Button bt2;
        private TextView tv;
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.factivity);
    
            /*
               通过点击bt1实现界面之间的跳转
               1.通过startActivity的方式来实现
               1>初始Intent(意图)
             */
    
    
            bt1=(Button) findViewById(R.id.bt1__first);
            bt2=(Button)findViewById(R.id.bt2__second);
            tv=(TextView) findViewById(R.id.textView1);
            //给bt1添加点击事件
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    /*
                    第一个参数:上下文对象this
                    第二个参数:目标文件
                     */
                    Intent intent = new Intent(firstactivity.this,Secondactivity.class);
                    startActivity(intent);
    
                }
            });
    
            /*
            2.通过startActivityForResult的方式来实现
             */
            //给bt2添加点击事件
            bt2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(firstactivity.this,Secondactivity.class);
    
                    /*
                    第一个参数:Intent对象
                    第二个参数:请求的一个标识
                     */
                    startActivityForResult(intent,1);
                }
            });
        }
    
        /*
        通过startActivityForResult的方式接受返回数据的方法
        requestCode:请求的标志,给每个页面发出请求的标志不一样,这样以后通过这个标志接受不同的数据
        resultCode:这个参数是setResult(int resultCode,Intent data)方法传来的,这个方法用在传来数据的那个页面
         */
        @Override
        protected  void onActivityResult(int requestCode,int resultCode ,Intent data){
            super.onActivityResult(requestCode,resultCode,data);
            if(requestCode==1&&resultCode==2){//当请求码是1&&返回码是2进行下面操作
                String content=data.getStringExtra("data");
                tv.setText(content);
            }
        }
    }
    

    Secondactivity.java

    package com.example.lenovo.intent;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    /**
     * Created by lenovo on 2018/2/27.
     */
    
    public class Secondactivity extends Activity {
        private Button bt;
        String content="你好";//想返回的内容
        @Override
        protected void onCreate( Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.sactivity);
    
            /*
            第二个页面什么时候给第一个页面回传数据
            回传到第一个页面的实际上是一个Intent对象
             */
            bt=(Button) findViewById(R.id.button);
            bt.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent data = new Intent();
                    //name相当于一个key,content是返回的内容
                    data.putExtra("data",content);
                    //resultCode是返回码,用来确定是哪个页面传来的数据,这里设置返回码是2
                    //这个页面传来数据,要用到下面这个方法setResult(int resultCode,Intent data)
                    setResult(2,data);
                    //结束当前页面
                    finish();
                }
            });
        }
    }
    

    展开全文
  • intent详解(一)

    万次阅读 多人点赞 2014-08-06 13:55:21
    前言:通过重新翻看android入门书籍,才发现原来自己露掉了那么多基础知道。原以为有了C的基础,快速开发应该是没有问题的了,但没有遇到问题的时候还是海搜,只知道这么写能完成这个功能,但为...《intent详解(二...

    前言:通过重新翻看android入门书籍,才发现原来自己露掉了那么多基础知道。原以为有了C的基础,快速开发应该是没有问题的了,但没有遇到问题的时候还是海搜,只知道这么写能完成这个功能,但为什么要这么写还是不太清楚,看来还是要好好把基础打一打,把android基础看完以后,再看看JAVA的基础知识。关于这个问题,写两篇,这篇基础知识讲解,下一篇代码实战。

     

    相关文章:

    《intent详解(二)》

     

    一、Intent是什么

    1、定义

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

    这个解释还是有点不太好理解,下面还有一个:Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android就会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器的Activity来浏览网页。 这个解释好像理解起来就容易好多,我们通过intent传入某种意图,而android就会根据这种意图,自动寻找合适的activity来启动,如果有多个条件符合的activity,就以列表的方式让用户手动选择一个。

    2、显示Intent与隐式Intent

    这两个概念刚开始不太好理解,先看两个通过intent启动activity的代码:

    例一:

     

    Intent intent = new Intent();
    intent.setClass(Context packageContext, OtherActivity.class);
    startActivity(intent);

    例二:

     

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_NEW);
    startActivity(intent);

    从这两段代码中可以明显看出,同样是startActivity,但第一个明确指出是启动OtherActivity,而在第二个例子中,并没有明确指出要启动哪个activity!

     

    这两种书写方式就分别是显示Intent(例一)、隐式Intent(例二);

     

    • 显式intent是指明确指出此intent是启动哪个activity.
    • 隐式intent是指并没有指出要启动哪个activity,而要系统自动去判断并启动匹配的activity.

     

    3、显式Intent小结

    有两种方式来显示的指示要启动的Activity:

    方式一:(通过setClassName)

     

    Intent intent = new Intent();
    //表示希望启动com.example.test_permission包中的com.example.test_permission.MainActivity
    intent.setClassName("com.example.test_permission", "com.example.test_permission.MainActivity");
    startActivity(intent);

     

     

    方式二:(通过SetClass)

     

    Intent intent = new Intent();
    intent.setClass(Context packageContext, OtherActivity.class);
    startActivity(intent);

    同样,setClass(Context packageContext, OtherActivity.class);是指启动packageContext包里的OtherActivity.class类;

    二、针对隐式intent,Activity的匹配原则

    上面我们讲了隐式intent是要靠系统自动去匹配并启动某个activity的。那系统是怎样匹配activity的呢,系统是怎样知道这个actitiy就是某个intent想要的呢。

    某个activity能不能被某个intent激活,要看这个activity是不是符合这个intent的要求,而某个activity能被哪个intent激活是有定义的,定义就在AndroidManifest.xml

    打开AndroidManifest.xml,找到任意一个activity,一般都能看到一段代码,举个例子,我随便复制一个,如下:

     

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    看这里有一对标签<intent-filter>……</intent-filter>
    在这个标签里定义的所有东东都是用来定义该activity可以被哪些intent激活的,如果匹配,就会被激活!!!!!

     

    在<intent-filter>里有以下几个属性可以让intent来匹配:Action、CategoryData;下面逐一介绍:

    1、Action:该activity可以执行的动作

    该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-filter>所列出的任意一个匹配的话,就说明这个activity是可以完成这个intent的意图的,可以将它激活!!!!

    常用的Action如下所示:

     

    ACTION_CALL activity 启动一个电话.
    ACTION_EDIT activity 显示用户编辑的数据.
    ACTION_MAIN activity 作为Task中第一个Activity启动
    ACTION_SYNC activity 同步手机与数据服务器上的数据.
    ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.
    ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告
    ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.
    ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.

    两条原则:

     

     

    • 一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。
    • 如果Intent请求的Action和<intent-filter>中个任意一条<action>匹配,那么该Intent就可以激活该activity(前提是除了action的其它项也要通过)

    两条注意:

     

    如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。

    •  如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配。
    •  反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺利地通过<intent-filter>的行为测试。

    2、Category:于指定当前动作(Action)被执行的环境

    即这个activity在哪个环境中才能被激活。不属于这个环境的,不能被激活。

    常用的Category属性如下所示:

     

         CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。表示所有intent都可以激活它 
    
        CATEGORY_HOME:设置该组件为Home Activity。
    
        CATEGORY_PREFERENCE:设置该组件为Preference。 
    
        CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。 
    
        CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。表示该activity只能用来浏览网页。 
    
        CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。

    注意:

     

     

    如果该activity想要通过隐式intent方式激活,那么不能没有任何category设置,至少包含一个android.intent.category.DEFAULT

    3、Data  执行时要操作的数据

    在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则:

    • android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀
    • android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
    • android:port 匹配url中的端口
    • android:path 匹配url中的路径

     

    在XML中声明可以操作的data域应该是这样的:

     

    <activity android:name=".TargetActivity">
    <intent-filter>
    	<action android:name="com.scott.intent.action.TARGET"/>
    	<category android:name="android.intent.category.DEFAULT"/>
    	<data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target"/>
    </intent-filter>
    </activity>

    注意:

     

    这个标识比较特殊,它定义了执行此Activity时所需要的数据,也就是说,这些数据是必须的!!!!!所有如果其它条件都足以激活该Activity,但intent却没有传进来指定类型的Data时,就不能激活该activity!!!!

    三、Intent隐式传递方法

    上面我们讲了一个Activity能被某隐式Intent唤醒的原则,只有这些全部匹配的intent才能唤醒这个Activity,下面我们就讲讲怎么向隐式intent传递这些参数,以便与activity匹配将向唤醒。

    1、Action

    使用Intent的一个构造方法即可实现传递Action参数:

     

    public Intent(String action) {
        mAction = action;
    }

    对于有如下声明的Activity:

     

    <activity android:name=".TargetActivity">
    	<intent-filter>
    		<action android:name="com.scott.intent.action.TARGET"/> 
    		<category android:name="android.intent.category.DEFAULT"/>
    	</intent-filter>
    </activity>

    要激活这个Activity,就需要如下这样构造Intent:(直接向intent中传递action的name值)

     

     

        public void gotoTargetActivity(View view) {
        	Intent intent = new Intent("com.scott.intent.action.TARGET");
        	startActivity(intent);
        }

    这样就可以启动我们上面的这个activity了。

     

    注意这里再次提醒,一个activity可以有多个action,只要有一个匹配就可以被启动。同样,如果仅指定某个action,而多个activity都具有这个action的话,系统会列出列表供用户选择执行哪一个activity.
     

    2、Category

    一个intent对象可以有任意个category。intent类定义了许多category常数.

     

    • addCategory()方法为一个intent对象增加一个category,
    • removeCategory删除一个category,
    • getCategories()获取intent所有的category.

     

    3、Data

    有两种传递data的方式:

    第一种:利用构造函数:

     

    public Intent(String action, Uri uri) {
        mAction = action;
        mData = uri;
    }

     

    第二种:利用Intent::SetData(URI uri)

     

    Intent intent = new Intent("com.scott.intent.action.name");
    intent.setData(Uri.parse("scheme://host:port/parth"));
    startActivity(intent);

    举个例子:(改动下上面的action的例子)

     

    <activity android:name=".TargetActivity">
    	<intent-filter>
    		<action android:name="com.scott.intent.action.TARGET"/>
    		<category android:name="android.intent.category.DEFAULT"/>
    		<data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target"/>
    	</intent-filter>
    </activity>

    这个时候如果要启动这个TargetActivity只指定action就不够了,我们需要为其设置data值,如下:

     

    Intent intent = new Intent("com.scott.intent.action.TARGET");
    intent.setData(Uri.parse("scott://com.scott.intent.data:7788/target"));
    startActivity(intent);

    此时,url中的每个部分和TargetActivity配置信息中全部一致才能跳转成功,否则就被系统拒绝。

     

    注意:

     

    不过有时候对path限定死了也不太好,比如我们有这样的url:(scott://com.scott.intent.data:7788/target/hello)(scott://com.scott.intent.data:7788/target/hi)

    这个时候该怎么办呢?我们需要使用另外一个元素:android:pathPrefix,表示路径前缀。
    我们把android:path="/target"修改为android:pathPrefix="/target",然后就可以满足以上的要求了。

     

    4、Extras

    这个参数不参与匹配activity,而仅作为额外数据传送到另一个activity中,接收的activity可以将其取出来。这些信息并不是激活这个activity所必须的。也就是说激活某个activity与否只上action、data、catagory有关,与extras无关。而extras用来传递附加信息,诸如用户名,用户密码什么的。

     

    可通过putXX()和getXX()方法存取信息;也可以通过创建Bundle对象,再通过putExtras()和getExtras()方法来存取。

    通过bundle对象传递

    发送方

     

    Intent intent = new Intent("com.scott.intent.action.TARGET");  
    Bundle bundle = new Bundle();  
    bundle.putInt("id", 0);  
    bundle.putString("name", "scott");  
    intent.putExtras(bundle);  
    startActivity(intent);  

    接收方:

     

     

    Bundle bundle = intent.getExtras();
    int id = bundle.getInt("id");
    String name = bundle.getString("name");

     

    更多参数传递方法见《通过Intent传递类对象》

     

    5、附《Intent调用常见系统组件方法》

     

     

    // 调用浏览器
    Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail");
    Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);
    
    // 调用地图
    Uri mapUri = Uri.parse("geo:100,100");
    Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);
    
    // 播放mp3
    Uri playUri = Uri.parse("file:///sdcard/test.mp3");
    Intent intent = new Intent(Intent.ACTION_VIEW, playUri);
    intent.setDataAndType(playUri, "audio/mp3");
    
    // 调用拨打电话
    Uri dialUri = Uri.parse("tel:10086");
    Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);
    // 直接拨打电话,需要加上权限<uses-permission id="android.permission.CALL_PHONE" />
    Uri callUri = Uri.parse("tel:10086");
    Intent intent = new Intent(Intent.ACTION_CALL, callUri);
    
    // 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的)
    Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");
    Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);
    // 直接发邮件
    Intent intent = new Intent(Intent.ACTION_SEND);
    String[] tos = { "zuolongsnail@gmail.com" };
    String[] ccs = { "zuolongsnail@163.com" };
    intent.putExtra(Intent.EXTRA_EMAIL, tos);
    intent.putExtra(Intent.EXTRA_CC, ccs);
    intent.putExtra(Intent.EXTRA_TEXT, "the email text");
    intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
    intent.setType("text/plain");
    Intent.createChooser(intent, "Choose Email Client");
    
    // 发短信
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.putExtra("sms_body", "the sms text");
    intent.setType("vnd.android-dir/mms-sms");
    // 直接发短信
    Uri smsToUri = Uri.parse("smsto:10086");
    Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);
    intent.putExtra("sms_body", "the sms text");
    // 发彩信
    Uri mmsUri = Uri.parse("content://media/external/images/media/23");
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra("sms_body", "the sms text");
    intent.putExtra(Intent.EXTRA_STREAM, mmsUri);
    intent.setType("image/png");
    
    // 卸载应用
    Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);
    Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);
    // 安装应用
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");
    
    // 在Android Market中查找应用
    Uri uri = Uri.parse("market://search?q=愤怒的小鸟");         
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);

     

    至此本文就结束了。

    下一篇用简单的几个实例,来具体讲解隐式intent的匹配与调用原理。

    请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/38399723 不胜感激!!!!!!

     

    如果你喜欢我的文章,你可能更喜欢我的公众号

    启舰杂谈

    参考文章 :

    《Android中Intent组件详解》

    《android Intent机制详解》

    《基础总结篇之九:Intent应用详解》

    《Intent详解》

    《Intent总结》

    《Intent中的四个重要属性——Action、Data、Category、Extras》

    展开全文
  • Intent的基本知识

    万次阅读 2018-09-27 12:31:41
    我们知道,Intent 是一个消息传递对象,使用它可以向其他Android组件请求操作。Intent的基本用途主要包括:启动 Activity、启动服务、传递广播。Intent分为显式Intent和隐式Intent。下面我通过启动Activity来讲解...

    我们知道,Intent 是一个消息传递对象,使用它可以向其他Android组件请求操作。Intent的基本用途主要包括:启动 Activity、启动服务、传递广播。Intent分为显式Intent和隐式Intent。下面我通过启动Activity来讲解学习Intent。

    Intent对象可以封装传递下面6种信息:

    1. 组件名称(ComponentName)
    2. 动作(Action)
    3. 种类(Category)
    4. 数据(Data)
    5. 附件信息(Extra)
    6. 标志(Flag)

    下面来讲解这些信息

    1、组件名称(CompomentName)

    组件名称指定要访问的组件,但也是构建显式 Intent 的一项重要信息,如下所示:

    Intent intent = new Intent(LoginActivity.this, HomeActivity.class);

    startActivity(intent);

    这样我们就启动了HomeActivity组件。

    通过构造函数指定组件名称是我们常用的方式,此外还可以通过以下三种方法指定组件名称

    Intent setClass (Context packageContext,  Class<?> cls);

    Intent setClassName (Context packageContext, String className);

    Intent setClassName (String packageName, String className);

    Intent setComponent (ComponentName component)

    这里首先需要说明是的CompomentName对象,它定义了一个组件的基本信息,通过Android的源代码我们可以看到,其实不论哪种方法,最终Intent都会创建一个CompomentName对象封装被调用的组件信息。

    其次我们来看一下Intent setClassName (String packageName, String className);这个方法。packageName指的是组件所属APP的包名。也就是AndroidManifest.xml中指定的包名,如下图所示:

    最后,需要说明的是,如果传递字符串形式的className,必须指定类的全名,包括类所属的命名空间。下面给出了一个样例代码:

    Intent intent = new Intent();

    intent.setClassName("com.practise.salary.nvwa", "com.practise.salary.nvwa.HomeActivity");

    startActivity(intent);

    设置Intent的组件名称,调用相关的组件,我们称为显式调用,一般用于调用APP自身的组件,当然,我们也可以通过显式调用其他APP的组件,后面讲解显示调用时,我们在来学习。

    2、动作(Action)

    所谓动作就是与Activity、Service、BroadcastRecvier绑定的一个字符串,通常在AndroidManifest.xml声明组件时,设置动作参数,如下图所示:

    我们可以通过设置Action属性,调用相关的组件,这称为隐式调用。

    一般我们通过Intent的setAction方法设置Intent的动作,这样系统会根据动作中指定的字符串查找匹配的组件。如下所示代码:

    Intent intent = new Intent();

    intent.setAction("android.intent.action.MAIN");

    startActivity(intent);

    当我们定义自己的操作,建议将应用的软件包名称作为前缀,动作名称用大写。

    3、种类(Category)

    运行上面的代码,大家会发现,弹出了一个选择框,选在调用那个组件,如下图所示:

    之所以会出现这种情况,是因为动作“android.intent.action.MAIN”对应的组件不止一个,Android系统无法判断到底调用那个组件(详细的筛选过程将在后面过滤规则中讲解)。

    Intent的Category的就是为了解决这类冲突问题的,Category的设置也是在AndroidManifest.xml文件中完成,如下图所示:

    Category也是一个字符串,我们可以通过addCategory为Intent添加Category,可以添加多个Category,如下面代码所示:

    Intent intent = new Intent();

    intent.setAction("com.practise.salary.nvwa.action.HOME");

    /*

    我们可以不用手动添加android.intent.category.DEFAULT,系统会自动添加这个Category

    */

    intent.addCategory("android.intent.category.DEFAULT");  

    startActivity(intent);

     我们可以通过文件夹、文件类比Category和Action。

     4、数据(Data)

    在Intent的隐式调用中,系统要根据请求对满足条件的组件进行筛选,这就是Intent的筛选机制。筛选条件除了Action、Category外,还有一个就是Data。此外Data还承担了简单的数据传递工作。

    组件Data的申明如下图所示:

    下面我们学习一下Intent的Data属性。

    Data包括MIME Type和URI。

    MIME Type指数据的类型,例如:video/mp4,video/avi通常我们通过

    Intent setType (String type)

    或者

    Intent setTypeAndNormalize (String type)

    完成MINE Type的设置。不同之处在于setTypeAndNormalize可以规范MINE Type。

    URI,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一资源名称的字符串,URI可以表示成如下格式:

    scheme://host:port/path

           其中

    1. scheme:协议表示,如http,https,ftp,content等;
    2. host:主机名称
    3. port:端口号
    4. path:具体的资源路径;

    我们常见的URL地址就是一种特殊的URI。

    我们可以通过

     

    Intent setData (Uri data)

    Intent setDataAndNormalize (Uri data)

    来设置Intent的URI,注意此处需要传递的是一个Uri对象,该对象封装了具体的URI,我们采用如下静态方法江URI字符串转换成URI对象。

    Uri parse (String uriString)

    此外我们还可以调用setDataAndType一次性设置URI和MIME Type。

    Intent setDataAndType (Uri data, String type)

    Intent setDataAndTypeAndNormalize(Uri data, String type)

    需要注意的是,当我们调用setType方法设置MIME Type,会自动清理URI的属性值,当调用setData方法来设置URI时,会自动清理MIME Type的值,如果要同时设置URI和MIMIE Type,必须使用setDataAndType方法。

    关于如何通过Data进行过滤,后面我们会讲到,下面我们通过一个样例来讲解如何通过Data完成简单的数据传递。

    我们通过显示调用Intent同时设置Intent的Data。代码如下:

    Intent intent = new Intent(LoginActivity.this, HomeActivity.class);

    intent.setDataAndType(Uri.parse("content://findUser/20180910"), "nvwa/user");

    startActivity(intent);

           在被调用的HomeActivity中,我们通过getItent()获取传递来的Intent。然后我们就可以通过

    Uri getData ()

    String getDataString ()

    获取URI,有了URI我们就可以解析出其中数据。下面给出被调用的组件的样例代码

    Intent intent = getIntent();

    Uri uri = intent.getData();

    Log.v("URI参数传递", uri.getPath());

    输出结果如下图所示:

    Uri类提供了更多的方法用于处理Uri值,可参考Uri相关的帮助 https://developer.android.google.cn/reference/android/net/Uri

    5、附件信息(Extra)

    通过Data只能传输比较简单的数据,Intent主要通过Extra完成组件之间的数据传递。

    调用方通过intent的putExtra设置数据,被调用的组件通过getXXXExtra获取数据,代码如下所示:

    调用方传递参数

    Intent intent = new Intent(LoginActivity.this, HomeActivity.class);

    intent.putExtra("userName", "zhangw");

    intent.putExtra("loginTime", Calendar.getInstance());

    startActivity(intent);

    被调方获取参数

    Intent intent = getIntent();

    Log.v("Extra数据传递", intent.getStringExtra("userName"));

    我们分析Android代码可以发现,其实通过Exctra传递的是一个Bundle,我们可以把Bundle理解成一个键值对,他通过putXXX设置数据,通过getXXX读取数据。我们可以自己定义一个Bundle对象,进行数据的传递,下面给一个样例程序。

           调用方传递参数

    Bundle bundle = new Bundle();

    bundle.putString("userName", "account");

    bundle.putSerializable("loginTime", Calendar.getInstance());

    intent.putExtras(bundle);

    被调方获取参数

    Intent intent = getIntent();

    Bundle bundle = intent.getExtras();

    Log.v("登录时间", bundle.getSerializable("loginTime").toString());

    输出结果如下图:

    注意,调用方通过intent的getExtras获取传递的来的bundle。

           6、标记(Flag)

          Intent通过

    Intent setFlags (int flags)

    设置标记。   关于标记的用法,后面我们用到后再给大家将,这并不表示这个概念不重要。

    (张伟:2018年9月27日)

    (转载时请注明来源)

    展开全文
  • Intent的详细解析以及用法

    千次阅读 2018-02-08 10:50:09
    Intent的详细解析以及用法  Android的四大组件分别为Activity 、Service、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者),这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个...
  • Intent 类型

    2019-03-30 19:08:00
    Intent 分为两种类型: 显式 Intent:按名称(完全限定类名)指定要启动的组件。 通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,启动新 Activity ...
  • Intent详解及其用法

    千次阅读 2019-03-30 14:55:23
    Intent 概述 翻译过来为“意图”,它是一种运行时绑定(run-time binding)机制,可以应用于两个应用间的通讯交互,也能够应用于在同一个应用下不同组件的交互(activity、service、broadcast receiver) 看下面...
  • Intent的基本使用

    万次阅读 2018-06-19 05:54:54
    Intent(意图),Android通信的桥梁,比如我们可以通过: startActivity(Intent)/startActivityForResult(Intent):来启动一个Activity startService(Intent)/bindService(Intent):来启动一个Service ...
  • Intent的用法(初步)

    万次阅读 2018-03-31 19:16:56
    可视化的知识便于复习和查找(注:笔记以学习《androi第一行代码》这本书为基础) 什么是IntentIntent在Android中的核心作用就是“跳转”(Android中的跳转机制),同时可以携带必要的信息,也可以将Intent作为一...
  • Android Intent 对象详解

    千次阅读 2018-10-28 03:22:46
    Android Intent 对象详解 一 . Intent 介绍与分类 Intent 可以翻译为 “ 意图 ”,也就是说 Intent 封装了 Android 应用程序需要启动某个组件的 “ 意图” 。IntentAndroid 程序中各组件之间进行交互的一种...
  • Android Intent的详细解析以及用法

    千次阅读 2019-01-23 11:40:16
     Android的四大组件分别为Activity 、Service、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者),这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用,Intent的...
  • Android Intent Action 大全

    千次阅读 2018-11-02 14:15:55
    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;... 1.Intent的用法
  • Android Intent多种传值方式

    万次阅读 2018-06-20 09:56:36
    Android Intent多种传值方式
  • 安卓Intent的Action

    千次阅读 2018-06-01 08:58:01
    Intent类里面定义了大师的Action的常量属性,例如:ACTION_CALL (打电话) ACTION_EDIT(编辑数据)等等,除此之外,我们可以使用setAction()函数来设置IntentAction属性,使用getAction()来获得Action ...
  • Android intent消息通知机制

    千次阅读 2011-07-19 17:57:36
    Android intent消息通知机制 一直想深入分析研究android中的intent消息通知机制和binder机制,现在终于有机会了,在这里我先通过网上查询资料,看相关文献,研究分析了android中的intent机制,最后将学到的东西整理...
  • Android Intent FLAG介绍

    千次阅读 2018-02-27 11:46:41
    临时访问读权限 intent的接受者将被授予 INTENT 数据uri 或者 在ClipData 上的读权限。 2.FLAG_GRANT_WRITE_URI_PERMISSION 临时访问写权限 intent的接受者将被授予 INTENT 数据uri 或者 在ClipData 上的写权限。 ...
  • protected Intent rIntent; btn_tnb.setOnClickListener(new OnClickListener(){ public void onClick(View v) { rIntent.putExtra(app.VISIT_TYPE, app.VISIT_TNB); rIntent.putExtra("Personname", ...
  • Android Intent传值和回传值

    万次阅读 2017-04-11 21:26:20
    为了实现点击某个Actionbar弹出某个Dialog Or AnortherAvtivity进行参数设置,同时设置好的参数还可以返回当前主界面进行处理,此时会想到用Intent的传值问题。那么首先要了解Intent启动一个Activity并进行值传递的...
  • Android intent安装apk

    千次阅读 2019-04-11 14:43:21
    intent 安装apk 偶然遇到了用intent的安装apk的现象 随手查了下 在此记录下 代码 /** * 安装apk * * @param context * @param apkPath */ public static void installApk(Context context, String apkPath...
  • android intent 选择文件

    千次阅读 2015-11-05 13:07:06
    我们很多时候会遇到需要选择手机文件用来编辑、上传等功能 ...Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("file/*"); startActivityForResult(intent, code); 然后在OnAC
  • Android的有三个基本组件——Activity,Service和BroadcastReceiver,它们都是通过Intent机制激活的,而不同类型的组件有传递Intent的不同方式。 (1) 要激活一个新的Activity,或者让一个现有的Activity执行新的...
  • Android intent 传值方法

    2016-12-14 12:58:51
    据我总结Intent传值的有四种方法 第一中普通的Intent传值Intent intent = new Intent(MainActivity.this, Main2Activity.class); intent.putExtra("name", "王五"); intent.putExtra("age", 18); startActivity...
  • AndroidIntent概述及使用

    万次阅读 多人点赞 2015-09-13 18:45:54
    Android中的Intent是一个非常重要且常用的类,可以用来在一个组件中启动App中的另一个组件或者是启动另一个App的组件,这里所说的组件指的是Activity、Service以及Broadcast。Intent的用途Intent主要有以下几种重要...
  • Intentandroid中特有的一个东西,我们可以个Intent指定特定的动作,然后调用
  • android intent打开各种文件的方法

    万次阅读 2014-03-09 15:57:01
    1./**  * 检测是否安装了某个软件  *  * @param pkgName ... * @param mContext  * @return  */  public static boolean isPkgInstalled(String pkgName, Activity mContext) {  PackageInf
  • Intent intent = new Intent(); intent.setAction("com.test.aidl.IAsrServiceInterface"); ![图片说明](https://img-ask.csdn.net/upload/201907/02/1562030522_221289.png) ![图片说明]...
  • Android中的IntentIntent-filter总结

    万次阅读 多人点赞 2016-10-20 20:29:21
    Intent中文意思指”意图”,按照Android的设计理念,Android使用Intent来封装程序的”调用意图”,不管启动Activity、Service、BroadcastReceiver,Android都使用统一的Intent对象来封装这一”启动意图”。此外,Intent也...
  • android Intent传递对象和集合

    千次阅读 2013-05-22 18:00:06
    Intent不能直接传递t对象,需要通过bundle来传递 向intent中添加数据: Intent intent_share = new Intent(MainActivity.this,ShareActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable(...
  • Android Intent跳转大全

    2019-01-21 14:59:47
    这篇博客会陆陆续续收录关于Android Intent跳转的代码   1.1跳转到应用通知选项 Intent i = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); i.putExtra(Settings.EXTRA_APP_PACKAGE, ...
  • Android intent category大全

    千次阅读 2017-04-13 18:32:03
    CATEGORY_ALTERNATIVE 设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的action CATEGORY_APP_BROWSER 和ACTION_MAIN一起使用,用来启动浏览器应用程序 CATEGORY_APP_CALCULATOR 和ACTION_MAIN一起...

空空如也

1 2 3 4 5 ... 20
收藏数 350,157
精华内容 140,062
关键字:

intent