Intent

Intent是Android程序中各组件之间进行交互的一种重要办法,它不仅能够指明当时组件想要执行的动作,还能够在不同组件之间传递数据。Intent一般可被用于发动活动、发动服务以及发送播送等场景,

显示intent

  • 第一个参数Context要求提供一个发动活动的上下文
  • 第二个参数Class则是指定想要发动的目标活动,

专门用于发动活动

startActivity()办法

装备好第二个活动后,在主活动里装备以下,首要是Intent那两行

    button1.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
//         Toast.makeText(MainActivity.this, "you clicked 1", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(MainActivity.this, second_activity.class);
        startActivity(intent);
       }
     });

隐式Intent

它并不明确指出咱们想要发动哪一个活动,而是指定了一系列更为笼统的action和category等信息,然后交由系统去分析这个Intent,并帮咱们找岀合适的活动去发动。

怎么操作呢?

通过在标签下装备的内容,能够指定当时活动能够响应的action和category,翻开AndroidManifest.xml

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

只有<action>和〈category〉中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent

应用程序翻开浏览器

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

setData()接纳一个url对象,首要用于指定当时Intent正在操作的数据,而这些数据通常都是以字符串的方法传入到Uri.parse()办法中解析发生的。

标签
  • android:scheme 用于指定数据的协议部分,如上例中的http部分。
  • android :host 用于指定数据的主机名部分,如上例中的www.baidu.com部分
  • android:port 用于指定数据的端口部分,一般紧随在主机名之后
  • android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
  • android :mimeType 用于指定能够处理的数据类型,答应运用通配符的办法进行指定

传递数据

Intent中提供了一系列putExtraO办法的重载,可 以把咱们想要传递的数据暂存在Intent中,发动了另一个活动后,只需要把这些数据再从Intent中取岀就能够了。

以上所有代码合集:

    button1.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        /**
         * 响应Toast
         */
//         Toast.makeText(MainActivity.this, "you clicked 1", Toast.LENGTH_SHORT).show();
        /**
         * 显式Intent
         */
//         Intent intent = new Intent(MainActivity.this, second_activity.class);
//         startActivity(intent);
        /**
         * 隐式intent
         */
//         Intent intent = new Intent("com.example.intent.MainActivity");
//         intent.addCategory("com.example.intent.MY_CATEGORY");
//         startActivity(intent);
        /**
         * 翻开浏览器
         */
//         Intent intent = new Intent(Intent.ACTION_VIEW);
//         intent.setData(Uri.parse("http://www.baidu.com"));
//         startActivity(intent);
        /**
         * 调集拨号
         */
//         Intent intent = new Intent(Intent.ACTION_DIAL);
//         intent.setData(Uri.parse("tel: 10086"));
//         startActivity(intent);
        /**
         * 传递数据
         */
//         String data =  "hello SecondActivity";
//         Intent intent = new Intent(MainActivity.this, second_activity.class);
//         intent.putExtra("extra_data", data);
//         startActivity(intent);
       }
     });

传递数据时另外一个活动代码:

    /**
     * 承受数据代码
     */
    Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");
    Log.d("SecondActivity", data);