第五章 隐式意图 2.2

1. 显式意图与隐式意图的区别:

  显式意图:显式意图明确指明了启动活动的上下文和想要启动的目标活动,显式意图明确指定了Intent应该传递给哪个组件。
  

  隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

开启自己应用的界面用显式意图,开启其他应用(一般指系统应用)的时候用隐式意图(比如拨打电话)。

  显式意图安全一些,隐式意图可以通过匹配intent-filter里面的标签对应来跳转到相应的页面 。
————————————————
版权声明:本文为CSDN博主「砖业洋__」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34115899/article/details/81633077

  

2. 隐式意图的使用:

  MainActivity:

 1 package com.example.activitydemo;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.content.Intent;
 6 import android.os.Bundle;
 7 import android.os.Handler;
 8 import android.text.TextUtils;
 9 import android.util.Log;
10 import android.view.View;
11 import android.widget.Button;
12 import android.widget.EditText;
13 import android.widget.Toast;
14 
15 /**
16  * 实现页面的跳转并且把数据传给另外一个界面
17  */
18 
19 public class MainActivity extends AppCompatActivity {
20 
21     private static final String TAG = "MainActivity";
22     private EditText mUsername;
23     private EditText mPassword;
24     private Button mLogin;
25 
26     @Override
27     protected void onCreate(Bundle savedInstanceState) {
28         super.onCreate(savedInstanceState);
29         setContentView(R.layout.activity_main);
30 
31         // 初始化控件
32         initView();
33 
34         // 设置监听事件
35         initListener();
36     }
37 
38     private void initListener() {
39         mLogin.setOnClickListener(new View.OnClickListener() {
40             @Override
41             public void onClick(View v) {
42                 // 创建专属于login按钮的事件
43                 Log.d(TAG, "Login clicked");
44 
45                 // 分开写函数的原因在于,执行一段内容后使用return结束,不影响下文的执行
46                 handlerLogin();
47 
48                 Log.d(TAG, "下文被执行");
49 
50             }
51         });
52     }
53 
54     private void handlerLogin() {
55         String usernameText = mUsername.getText().toString().trim();
56         if (TextUtils.isEmpty(usernameText)) {
57             // 在手机的最底下弹出提示
58             Toast.makeText(this, "输入的账号为空!", Toast.LENGTH_SHORT).show();
59             return;
60         }
61 
62         String passwordText = mPassword.getText().toString().trim();
63         if (TextUtils.isEmpty(passwordText)) {
64             Toast.makeText(this, "输入的密码为空!", Toast.LENGTH_SHORT).show();
65             return;
66         }
67 
68         // 有密码有账号以后,把数据传到另外一个界面
69         // 创建一个意图对象,通过startActivity方法实现跳转
70         /**
71          * 显示意图启动与跳转
72          */
73 //        // 这里指定了特定了组件
74 //        Intent intent = new Intent(this, SecondaryActivity.class);
75 //        // 通过类似键值对进行数据传输
76 //        intent.putExtra("username", usernameText);
77 //        intent.putExtra("password", passwordText);
78 //        startActivity(intent);
79 
80         /**
81          * 使用隐式意图跳转到第三个界面,没有指定特定的组件
82          */
83         Intent intent = new Intent();
84         // 在Manifest中注册过意图过滤器后,设定action
85         intent.setAction("com.example.LOGIN_INFO");
86 //        intent.addCategory("android.intent.category.DEFAULT");
87         // 或者写成,一般优先使用常量,而且自己设定的也尽量设为常量
88         intent.addCategory(Intent.CATEGORY_DEFAULT);
89         intent.putExtra("username", usernameText);
90         intent.putExtra("password", passwordText);
91         startActivity(intent);
92     }
93 
94     private void initView() {
95         mUsername = this.findViewById(R.id.username);
96         mPassword = this.findViewById(R.id.password);
97         mLogin = this.findViewById(R.id.login);
98     }
99 }

  跳转到的第三个界面ThirdActivity:

 1 package com.example.activitydemo;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.util.Log;
 7 import android.widget.TextView;
 8 
 9 import androidx.annotation.Nullable;
10 
11 /**
12  * 通过隐式意图跳转到该界面
13  */
14 public class ThirdActivity extends Activity {
15 
16     private static final String TAG = "ThirdActivity";
17 
18     @Override
19     protected void onCreate(@Nullable Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_second);
22 
23         TextView info = this.findViewById(R.id.info);
24 
25         // 首先初始化
26         Intent intent = getIntent();
27         // 通过键取值
28         String username = intent.getStringExtra("username");
29         String password = intent.getStringExtra("password");
30 
31         Log.d(TAG, "username == " + username);
32         Log.d(TAG, "password == " + password);
33 
34         // 也可以用占位符写
35         info.setText("您的账号:"+ username + "; 密码:" + password);
36     }
37 }

 

上一篇:第五章 模拟跳转短信发送 2.8


下一篇:Android-存储空间的最佳实践,为什么阿里的程序员成长如此之快