zoukankan      html  css  js  c++  java
  • Android组件--意图(Intent)

    1. 隐示调用和显示调用

    参考资料:http://blog.csdn.net/harvic880925/article/details/38399723

    1.概念

    1). 显式意图:

    能从intent上直观的看到跳转到哪一个界面

    优劣:直接跳转,效率高

    应用场景: 一般是自己内部跳转的时候

    2). 隐式意图:

    要指定action(动作) 、data(数据) 来达到跳转的目的,系统通过给定的action/data等在注册里去查找。

    优劣:因为有查找过程,效率低下

    应用场景:一般是跳转到其他应用中的某个界面,或者自己的应用界面想被其他应用打开。

    2、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。

    理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是隐式intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。

    3. 概念

    acyivity

    <intent-filter>    
    //注册一个自定义,当有人用到时new Intent去创建一个这个action然后调用
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.HOME" />
    </intent-filter>

    BroadcastReceiver

    <receiver android:name=".MyReceiver">
    <intent-filter>
    //系统发送广播,也会new intent去创建这个action,然后调用
    <action android:name="android.intent.action.MEDIA_MOUNTED"></action>
    <data android:scheme="file"></data>
    </intent-filter>
    </receiver>

    2.代码 

    manifest.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="sample.android_serialport_api.adapter">
    
        <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组件-->
            <activity android:name=".MainActivity">
                <!--意图过滤器-->
                <intent-filter>
                    <!--action:行为;MAIN就是一开始进入main函数-->
                    <action android:name="android.intent.action.MAIN" />
                    <!--cateory:类别;LAUNCHER就是新建立一个图标-->
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!--注册第二个界面:什么都没填写,表示只是进行了注册,通过显示意图intent调用-->
            <activity android:name=".SecondActivity"></activity>
            <!--注册第三个界面:加入了意图intent:表示通过隐示意图intent来调用-->
            <activity android:name=".ThirdActivity">
                <!--意图过滤器-->
                <intent-filter>
                    <!--意图行为:相当于一个ID,是唯一的标识。当只有有intent的action行为为这个name的时候
                    ,系统就会去注册中找有没有对应的,如果有,则会调用。不过这里一般为包名-->
                    <action android:name="aplex hahah test"/>
                    <!--如果为隐示意图,必须要设置cateory为DEFAULT,否则报错-->
                    <category android:name="android.intent.category.DEFAULT"/>
                    <!--还可以写一个data;-->
                    <!--<data android:xxx=""/>-->
                </intent-filter>>
            </activity>
        </application>
    
    </manifest>
    
    
    MainActivity.java
    public class MainActivity extends AppCompatActivity {
        //显示调用的
        Button bt1;
        //隐示调用的
        Button bt2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bt1 = findViewById(R.id.bt1);
            bt2 = findViewById(R.id.bt2);
    
            bt1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View var1){
                    //显示Intent
                    Intent it1 =new Intent(MainActivity.this, SecondActivity.class);
                    startActivity(it1);
                }
            });
            bt2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent it2 = new Intent();
                    it2.setAction("aplex hahah test");
                    it2.addCategory("android.intent.category.DEFAULT");
                    startActivity(it2);
                }
            });
        }
    }


    SecondActivity.java

    public class SecondActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
    
        }
    }

    ThirdActivity.java

    public class ThirdActivity extends AppCompatActivity {
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_third);
    
        }
    }

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="sample.android_serialport_api.adapter.MainActivity">
    
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt1"
            android:text="第一界面;Intent显示调用"/>
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt2"
            android:text="第二界面;Intent隐示调用"/>
    
    </LinearLayout>

    效果:

    2. 传递数据(没看,用到再说)

  • 相关阅读:
    python基础教程(第二版)---1.11字符串
    python基础教程(第二版)---1.91(我只记录了cmath模块相关)
    python基础教程(第二版)---1.7获取用户输入(讲的是input函数)
    python基础教程(第二版)---1.6语句
    openGL 进行图像处理
    uchar4
    709 与 601 公式上的区别
    J420P 黑白红青蓝黄对应的YUV 值
    混音的方法
    CPU周期, 时钟周期, 机器周期, 指令周期 总线周期
  • 原文地址:https://www.cnblogs.com/maogefff/p/7806024.html
Copyright © 2011-2022 走看看