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>  
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” 
xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”
android:layout_height=”match_parent” android:paddingLeft=”@dimen/activity_horizontal_margin”
android:paddingRight=”@dimen/activity_horizontal_margin”
android:paddingTop=”@dimen/activity_vertical_margin”
android:paddingBottom=”@dimen/activity_vertical_margin” tools:context=”.MainActivity”>

&lt;Button
    android:id="@+id/button_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Button 1"
    /&gt;

</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>  
<?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”>

&lt;Button
    android:id="@+id/button_2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:text="Button 2"
    /&gt;

</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.     }  
public class SecondActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏
    setContentView(R.layout.activity_second);
}</pre>5.在AndroidManifest.xml中为SecondActivity活动进行注册

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

  1. <activity  
  2.     android:name=”.SecondActivity”  
  3.     android:label=”@string/title_activity_second” >  
  4. </activity>  
        <activity 
android:name=".SecondActivity"
android:label="@string/title_activity_second" >
</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. }  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button=(Button)findViewById(R.id.button_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
                Intent intent=new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }

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. }  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_second);

        Button button=(Button)findViewById(R.id.button_2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SecondActivity.this, "You Click Button 2", Toast.LENGTH_SHORT).show();
                finish();
            }
        });
    }

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



程序生成后,手机出现界面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>  
        <activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second" >
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </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.  }  
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button=(Button)findViewById(R.id.button_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
                //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
                Intent intent=new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }
        });
    }
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>  
        <activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second" >
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>
        </activity>
    </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.     }  
        Button button=(Button)findViewById(R.id.button_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
                //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
                Intent intent=new Intent("com.example.activitytest.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);
            }


运行程序,成功


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

隐式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. });  
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
                //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
                //Intent intent=new Intent("com.example.activitytest.ACTION_START");
                //intent.addCategory("com.example.activitytest.MY_CATEGORY");

                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });
程序中首先指定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. });  
        Button button=(Button)findViewById(R.id.button_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
                //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
                //Intent intent=new Intent("com.example.activitytest.ACTION_START");
                //intent.addCategory("com.example.activitytest.MY_CATEGORY");

                Intent intent=new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }
        });

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






            </div>


猜你喜欢

转载自blog.csdn.net/u014199143/article/details/80373262
今日推荐