zoukankan      html  css  js  c++  java
  • Intent

    Intent(意图)

    Intent 是一个消息传递对象。

    Intent 可以通过多种方式促进组件之间的通信,基本用例主要包括三个:

    1.启动Activity 2.启动服务 3.传递广播

    1.Intent类型

    Intent分为两种类型:

    • 显示Intent

      创建显示Intent启动Activity或者服务时候,系统将立即启动Intent对象中指定的应用组件。

    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
    startActivity(intent);
    

    Intent第一个参数是启动活动的上下文,第二个参数class是指定想要启动的活动。

    然后在通过Acitvity提供的startActivity()方法来启动活动。

    注意:启动服务时必须使用显示Intent

    • 隐式Intent

    创建隐式Intent时,将会在设备上的其它应用的清单文件中声明的Intent过滤器进行比较,找到匹配结果并启动该组件,如果有多个匹配结果,则系统会提供一个对话框,来让用户选择。

     Intent intent1=new Intent("com.tiger.secondactivity");
     intent1.addCategory("android.intent.category.DEFAULT");
     startActivity(intent1);
    
            <activity android:name=".SecondActivity">
                <intent-filter>
                    <action android:name="com.tiger.secondactivity"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>
    

    注意:清单文件中需要写出对应

    ​ 每个Intent只能指定一个action,但是能够绑定多个category。

    2.Intent之间的数据传递

    (1) 向下一个活动传递数据

    • 发送数据
                      Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                      intent.putExtra("data1","data111");
                      intent.putExtra("data2",123);
                      startActivity(intent);
    
    • 接收数据
              String data1= getIntent().getStringExtra("data1");
              int data2= getIntent().getIntExtra("data2",0);
    

    Intent 中提供了一系列的putExtra() 方法重载,支持我们传递各种数据类型,然后在另一个活动中再通过getIntent().get[数据类型](“name”,默认值)来获取传递过来的值,存储的方式类似于键值对。

    如果数据较多的话我们可以通过 :

    Bundle bd= getIntent().getExtras();
    String data1= bd.getString("data1");
    

    (2)返回数据给上一个活动

    首先我们需要修改启动方式为 startActivityForResult(),第二参数是请求码,用于在之后的回调中判断数据的来源。

    • 在MainActivity中启动 SecondActivity
         Intent intent=new Intent(MainActivity.this,SecondActivity.class);
         startActivityForResult(intent,1);
    
    • 在SecondActivity 中返回数据给MainActivity
         Intent intent=new Intent();
         intent.putExtra("data3","data333");
         setResult(RESULT_OK,intent); //向上一个活动返回数据
         finish(); //销毁当前活动
    
    • 在MainActivity中接收返回值
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            if(requestCode==1){ //这个就说我们启动活动时指定的请求码
                if(resultCode==RESULT_OK){  //这个是我们 setResult()时指定的值
                    String data3=data.getStringExtra("data3");
                }
            }
        }
    

    3.常用Intent:

    //1.返回桌面
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_HOME);
                    startActivity(intent);
    
    //2.打开 Google
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("http://www.google.com"));
                    startActivity(intent);
    
    //3.打开拨号界面
                    Intent intent=new Intent();
                                    // ACTION_CALL 表示直接拨过去,需要申请权限
                    intent.setAction(Intent.ACTION_DIAL);
                    intent.setData(Uri.parse("tel:10086"));
                    startActivity(intent);
    
     //4.给10086发送内容为“Hello”的短信
                    Uri uri = Uri.parse("smsto:10086");
                    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
                    intent.putExtra("sms_body", "Hello");
                    startActivity(intent);
    
     //5.打开设置界面 (可以修改不同的Action跳转到不同的设置界面)
                    Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
                    startActivityForResult(intent, 0);
    

    更多请参考:

    https://developer.android.com/guide/components/intents-filters.html

    https://developer.android.com/guide/components/intents-common.html

    文章部分内容摘自网络和图书,如有侵权,请联系我。
  • 相关阅读:
    bzoj1562: [NOI2009]变换序列
    bzoj2763: [JLOI2011]飞行路线
    有上下界网络流
    bzoj3211: 花神游历各国
    bzoj3668: [Noi2014]起床困难综合症
    bzoj2743: [HEOI2012]采花
    BZOJ 1787: [Ahoi2008]Meet 紧急集合
    BZOJ 1029 [JSOI2007]建筑抢修 贪心
    BZOJ 2748 音量调节
    BZOJ 3524: [Poi2014]Couriers 主席树
  • 原文地址:https://www.cnblogs.com/-Tiger/p/7446898.html
Copyright © 2011-2022 走看看