zoukankan      html  css  js  c++  java
  • Android Studio Intent使用(显式、隐式)

    https://blog.csdn.net/u012005313/article/details/47006689

    使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面。Intent用法分为显示和隐式

    Intent概念:Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

    Intent一般可被用于启动活动启动服务、以及发送广播等场景

    ##########################################################

    前期准备工作

    1.创建一个项目(IntentTest),使用一个默认的空的活动MainActivity

    2.修改activity_main.xml布局文件

    1.  
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2.  
      xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    3.  
      android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    4.  
      android:paddingRight="@dimen/activity_horizontal_margin"
    5.  
      android:paddingTop="@dimen/activity_vertical_margin"
    6.  
      android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    7.  
       
    8.  
      <Button
    9.  
      android:id="@+id/button_1"
    10.  
      android:layout_width="match_parent"
    11.  
      android:layout_height="wrap_content"
    12.  
      android:text="Button 1"
    13.  
      />
    14.  
       
    15.  
      </RelativeLayout>

    2.新建一个活动SecondActivity

    Activity Name = SecondActivity 

    Layout Name = activity_second

    3.修改activity_second.xml布局文件

    代码如下:

    1.  
      <?xml version="1.0" encoding="utf-8"?>
    2.  
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.  
      android:layout_width="match_parent" android:layout_height="match_parent">
    4.  
       
    5.  
      <Button
    6.  
      android:id="@+id/button_2"
    7.  
      android:layout_width="match_parent"
    8.  
      android:layout_height="wrap_content"
    9.  
      android:text="Button 2"
    10.  
      />
    11.  
       
    12.  
      </LinearLayout>

    解释:定义一个按钮,按钮上文本显示为Button 2

    4.修改SecondActivity.java类    

    代码如下:

    1.  
      public class SecondActivity extends Activity {
    2.  
       
    3.  
      @Override
    4.  
      protected void onCreate(Bundle savedInstanceState) {
    5.  
      super.onCreate(savedInstanceState);
    6.  
      requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏
    7.  
      setContentView(R.layout.activity_second);
    8.  
      }

    5.在AndroidManifest.xml中为SecondActivity活动进行注册

    在<application></application>之间加入

    1.  
      <activity
    2.  
      android:name=".SecondActivity"
    3.  
      android:label="@string/title_activity_second" >
    4.  
      </activity>


    note:SecondActivity不是主活动,不需要配置<intent-filter>标签里的内容

    ##############################################

    显示使用Intent

    Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls)

    该构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文

    第二个参数Class则是指定想要启动的目标活动

    Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动,它接收一个Intent参数

    我们将构建好的Intent传入startActivity()方法就可以启动目标活动

    1.修改MainActivity类中按钮的点击事件

    1.  
      @Override
    2.  
      protected void onCreate(Bundle savedInstanceState) {
    3.  
      super.onCreate(savedInstanceState);
    4.  
      setContentView(R.layout.activity_main);
    5.  
       
    6.  
      Button button=(Button)findViewById(R.id.button_1);
    7.  
      button.setOnClickListener(new View.OnClickListener() {
    8.  
      @Override
    9.  
      public void onClick(View v) {
    10.  
      Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
    11.  
      Intent intent=new Intent(MainActivity.this, SecondActivity.class);
    12.  
      startActivity(intent);
    13.  
      }
    14.  
      });
    15.  
      }

    2.修改SecondActivity类中按钮的点击事件

    1.  
      @Override
    2.  
      protected void onCreate(Bundle savedInstanceState) {
    3.  
      super.onCreate(savedInstanceState);
    4.  
      requestWindowFeature(Window.FEATURE_NO_TITLE);
    5.  
      setContentView(R.layout.activity_second);
    6.  
       
    7.  
      Button button=(Button)findViewById(R.id.button_2);
    8.  
      button.setOnClickListener(new View.OnClickListener() {
    9.  
      @Override
    10.  
      public void onClick(View v) {
    11.  
      Toast.makeText(SecondActivity.this, "You Click Button 2", Toast.LENGTH_SHORT).show();
    12.  
      finish();
    13.  
      }
    14.  
      });
    15.  
      }


    点击运行按钮,截图如下:

    程序生成后,手机出现界面1,点击button1按钮,界面跳转到界面2,点击button2,界面跳转会界面1

    ###########################################

    隐式使用Intent

    隐式Intent通过指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮助我们找出合适的活动去启动

    1.修改AndroidManifest.xml文件,修改活动如下:

    1.  
      <activity
    2.  
      android:name=".SecondActivity"
    3.  
      android:label="@string/title_activity_second" >
    4.  
      <intent-filter>
    5.  
      <action android:name="com.example.activitytest.ACTION_START" />
    6.  
      <category android:name="android.intent.category.DEFAULT" />
    7.  
      </intent-filter>
    8.  
      </activity>

    在<action>标签中指明当前活动可以响应com.example.activitytest.ACTION_START这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category。

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

    2.修改MainActivity类中按钮的点击事件

    1.  
      @Override
    2.  
      protected void onCreate(Bundle savedInstanceState) {
    3.  
      super.onCreate(savedInstanceState);
    4.  
      setContentView(R.layout.activity_main);
    5.  
       
    6.  
      Button button=(Button)findViewById(R.id.button_1);
    7.  
      button.setOnClickListener(new View.OnClickListener() {
    8.  
      @Override
    9.  
      public void onClick(View v) {
    10.  
      Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
    11.  
      //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
    12.  
      Intent intent=new Intent("com.example.activitytest.ACTION_START");
    13.  
      startActivity(intent);
    14.  
      }
    15.  
      });
    16.  
      }

    note: android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中

    点击运行按钮,程序成功运行

    #######################################################3

    ADD:每个Intent中只能指定一个action,但却能够指定多个category.

    上述的Intent中只有一个默认的category,再增加一个测试一下

    1.修改AndroidManifest.xml文件

    1.  
      <activity
    2.  
      android:name=".SecondActivity"
    3.  
      android:label="@string/title_activity_second" >
    4.  
      <intent-filter>
    5.  
      <action android:name="com.example.activitytest.ACTION_START" />
    6.  
      <category android:name="android.intent.category.DEFAULT" />
    7.  
      <category android:name="com.example.activitytest.MY_CATEGORY" />
    8.  
      </intent-filter>
    9.  
      </activity>
    10.  
      </application>


    2.修改MainActivity类中按钮的点击事件

    1.  
      Button button=(Button)findViewById(R.id.button_1);
    2.  
      button.setOnClickListener(new View.OnClickListener() {
    3.  
      @Override
    4.  
      public void onClick(View v) {
    5.  
      Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
    6.  
      //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
    7.  
      Intent intent=new Intent("com.example.activitytest.ACTION_START");
    8.  
      intent.addCategory("com.example.activitytest.MY_CATEGORY");
    9.  
      startActivity(intent);
    10.  
      }



    运行程序,成功

    #################################################

    隐式Intent的更多用法

    使用隐式Intent,不仅可以启动自己程序内部的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享称为可能

    例如:在应用程序中展示一个网页

    修改MainActivity中按钮点击事件

    1.  
      button.setOnClickListener(new View.OnClickListener() {
    2.  
      @Override
    3.  
      public void onClick(View v) {
    4.  
      Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
    5.  
      //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
    6.  
      //Intent intent=new Intent("com.example.activitytest.ACTION_START");
    7.  
      //intent.addCategory("com.example.activitytest.MY_CATEGORY");
    8.  
       
    9.  
      Intent intent=new Intent(Intent.ACTION_VIEW);
    10.  
      intent.setData(Uri.parse("http://www.baidu.com"));
    11.  
      startActivity(intent);
    12.  
      }
    13.  
      });

    程序中首先指定Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW.

    然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去

    此时重新运行程序,在MainActivity界面点击按钮就可以打开系统浏览器

    例如:在程序中调用系统拨号界面

    修改MainActivity中按钮点击事件

    1.  
      Button button=(Button)findViewById(R.id.button_1);
    2.  
      button.setOnClickListener(new View.OnClickListener() {
    3.  
      @Override
    4.  
      public void onClick(View v) {
    5.  
      Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
    6.  
      //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
    7.  
      //Intent intent=new Intent("com.example.activitytest.ACTION_START");
    8.  
      //intent.addCategory("com.example.activitytest.MY_CATEGORY");
    9.  
       
    10.  
      Intent intent=new Intent(Intent.ACTION_DIAL);
    11.  
      intent.setData(Uri.parse("tel:10086"));
    12.  
      startActivity(intent);
    13.  
      }
    14.  
      });

    Intent.ACTION_DIAL是一个Android系统的内置动作

    --------------------- 本文来自 编号1993 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u012005313/article/details/47006689?utm_source=copy 

  • 相关阅读:
    将python对象序列化成php能读取的格式(即能反序列化到对象)
    Atitit.研发管理---api版本号策略与版本控制
    Atitit.研发管理---api版本号策略与版本控制
    Atitit.jsou html转换纯文本 java c# php
    Atitit.jsou html转换纯文本 java c# php
    atitit.基于bat cli的插件管理系统.doc
    atitit.基于bat cli的插件管理系统.doc
    atititi.soa  微服务 区别 联系 优缺点.doc
    atititi.soa  微服务 区别 联系 优缺点.doc
    userService 用户 会员 系统设计 v2 q224 .doc
  • 原文地址:https://www.cnblogs.com/Nina-piaoye/p/9708927.html
Copyright © 2011-2022 走看看