• 第五章 Android应用核心Intent


    1 初识Intent

    intent的作用就类似于快递员,在Activity之间传送信息。

     intent将联系人的信息带到了“联系人详情页”中

     intent工作流程:

    intent的基本作用:

    • 开启下一个Activity
    • 启动一个Service
    • 传递广播 

    2 Intent对象的属性

    2.1 Component name 

    1. btn.setOnClickListener(new View.OnClickListener() {
    2. @Override
    3. public void onClick(View v) {
    4. Intent intent = new Intent();
    5. ComponentName componentName = new ComponentName("com.example.intent",
    6. "com.example.intent.DetailActivity");
    7. intent.setComponent(componentName);
    8. startActivity(intent);
    9. }
    10. });

    2.2 Action和Data

    左边是Action,右边是Data。

    第一行的意思是打开编辑联系人第一条的信息

    第二行的意思是拨打电话10086

    第三行的意思是打开mingribook.com网站

     

     

    1. package com.example.actiondata;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.content.Intent;
    4. import android.media.Image;
    5. import android.net.Uri;
    6. import android.os.Bundle;
    7. import android.view.View;
    8. import android.widget.Button;
    9. import android.widget.ImageView;
    10. public class MainActivity extends AppCompatActivity {
    11. @Override
    12. protected void onCreate(Bundle savedInstanceState) {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.activity_main);
    15. ImageView phone = findViewById(R.id.phone);
    16. ImageView email = findViewById(R.id.email);
    17. View.OnClickListener cl = new View.OnClickListener() {
    18. @Override
    19. public void onClick(View v) {
    20. ImageView imageView = (ImageView)v;
    21. Intent intent = new Intent();
    22. switch(imageView.getId()) {
    23. case R.id.phone:
    24. intent.setAction(Intent.ACTION_DIAL);
    25. intent.setData(Uri.parse("tel:123456789"));
    26. startActivity(intent);
    27. break;
    28. case R.id.email:
    29. intent.setAction(Intent.ACTION_SENDTO);
    30. intent.setData(Uri.parse("smsto:5554"));
    31. startActivity(intent);
    32. break;
    33. default:
    34. break;
    35. }
    36. }
    37. };
    38. phone.setOnClickListener(cl);
    39. email.setOnClickListener(cl);
    40. }
    41. }
    1. <uses-permission android:name="android.permission.CALL_PHONE"/>
    2. <uses-permission android:name="android.permission.SEND_SMS"/>

    2.4 Action和Category

     

    1. package com.example.actioncategory;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.content.Intent;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.widget.ImageButton;
    7. public class MainActivity extends AppCompatActivity {
    8. @Override
    9. protected void onCreate(Bundle savedInstanceState) {
    10. super.onCreate(savedInstanceState);
    11. setContentView(R.layout.activity_main);
    12. ImageButton imageButton = findViewById(R.id.imageButton);
    13. imageButton.setOnClickListener(new View.OnClickListener() {
    14. @Override
    15. public void onClick(View v) {
    16. Intent intent = new Intent();
    17. intent.setAction(Intent.ACTION_MAIN);
    18. intent.addCategory(Intent.CATEGORY_HOME);
    19. startActivity(intent);
    20. }
    21. });
    22. }
    23. }

    2.5 Extras和Flags

    Extras:就像前面的putExtras()和getExtras()一样,可以在Activity之间传递信息

    Flags:emmm,啥栈啊啥玩意儿的,如下设置后可以不保存历史。

    1. public class MainActivity extends AppCompatActivity {
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. Button button = findViewById(R.id.btn);
    7. button.setOnClickListener(new View.OnClickListener() {
    8. @Override
    9. public void onClick(View v) {
    10. Intent intent = new Intent(MainActivity.this, DetailActivity.class);
    11. intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    12. startActivity(intent);
    13. }
    14. });
    15. }
    16. }

    2.6 Intent种类

    2.6.1 显示Intent

    明确知道要显示的是啥

     2.6.2 隐式Activity

     

    1. package com.example.implicitintent;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.content.Intent;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.view.View;
    7. import android.widget.Button;
    8. public class MainActivity extends AppCompatActivity {
    9. @Override
    10. protected void onCreate(Bundle savedInstanceState) {
    11. super.onCreate(savedInstanceState);
    12. setContentView(R.layout.activity_main);
    13. Button btn = findViewById(R.id.btn);
    14. btn.setOnClickListener(new View.OnClickListener() {
    15. @Override
    16. public void onClick(View v) {
    17. Intent intent = new Intent();
    18. intent.setAction(Intent.ACTION_VIEW);
    19. intent.setData(Uri.parse("http://www.mingrisoft.com"));
    20. startActivity(intent);
    21. }
    22. });
    23. }
    24. }

     2.7 Intent过滤器

    在 Manifest文件中编写intent-filter

     

     一般通过action+category或者action+data这两种方式来进行过滤

     

     

    1. android:name=".ShowActivity"
    2. android:exported="true">
    3. "android.intent.action.VIEW"/>
    4. "android.intent.category.DEFAULT"/>
    1. public class MainActivity extends AppCompatActivity {
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. Button btn = findViewById(R.id.btn);
    7. btn.setOnClickListener(new View.OnClickListener() {
    8. @Override
    9. public void onClick(View v) {
    10. Intent intent = new Intent();
    11. intent.setAction(Intent.ACTION_VIEW);
    12. intent.addCategory(Intent.CATEGORY_DEFAULT);
    13. startActivity(intent);
    14. }
    15. });
    16. }
    17. }

  • 相关阅读:
    vue-cli vue3
    AIR32F103(九) CAN总线的通信和ID过滤机制及实例
    中倍健未来数智药房首获红杉基金1千万美元天使轮融资
    基础爬虫篇
    DER编码
    数据库基础知识
    docker搭建yapi接口文档系统、Idea中上传接口、在线调用
    Qt5开发及实例V2.0-第十六章-Qt汽车销售管理系统实例
    android源码设计模式学习笔记(一)
    一文带你了解Windows操作系统安全,保护自己的电脑不受侵害
  • 原文地址:https://blog.csdn.net/qq_37054755/article/details/127692632