当前位置: 首页 > news >正文

深入分析 Android Activity (六)

文章目录

    • 深入分析 Android Activity (六)
    • 1. Activity 的权限管理
      • 1.1 在 Manifest 文件中声明权限
      • 1.2 运行时请求权限
      • 1.3 处理权限请求结果
      • 1.4 处理权限的最佳实践
    • 2. Activity 的数据传递
      • 2.1 使用 Intent 传递数据
      • 2.2 使用 Bundle 传递复杂数据
    • 3. Activity 的动画和过渡效果
      • 3.1 使用内置动画资源
      • 3.2 使用自定义动画
    • 4. Activity 的导航和返回栈管理
      • 4.1 使用 Intent 启动 Activity
      • 4.2 使用任务和返回栈
      • 4.3 使用导航组件
    • 总结

深入分析 Android Activity (六)

1. Activity 的权限管理

Android 应用需要请求权限才能访问某些敏感数据或硬件功能。理解和正确处理权限请求是确保应用安全性和用户隐私的关键。

1.1 在 Manifest 文件中声明权限

首先,在 AndroidManifest.xml 文件中声明所需权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapp"><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><application... ><activity android:name=".MainActivity">...</activity></application>
</manifest>

1.2 运行时请求权限

从 Android 6.0 (API level 23) 开始,需要在运行时请求权限。

private void requestPermissions() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);}
}

1.3 处理权限请求结果

重写 onRequestPermissionsResult 方法处理用户的响应。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == REQUEST_CAMERA_PERMISSION) {if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {// Permission grantedopenCamera();} else {// Permission deniedToast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();}}
}

1.4 处理权限的最佳实践

  • 提供明确的权限请求理由。
  • 处理用户拒绝权限的情况,提供替代方案。
  • 避免滥用权限,仅请求必需的权限。

2. Activity 的数据传递

在 Android 应用中,Activity 之间的数据传递是常见的需求。可以使用 IntentBundle 进行数据传递。

2.1 使用 Intent 传递数据

在启动新 Activity 时,可以通过 Intent 传递数据。

// Starting a new Activity with data
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

在目标 Activity 中接收数据:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Intent intent = getIntent();String value = intent.getStringExtra("key");// Use the received data
}

2.2 使用 Bundle 传递复杂数据

Bundle 可以传递更复杂的数据结构。

// Putting data into Bundle
Bundle bundle = new Bundle();
bundle.putString("key", "value");
bundle.putInt("number", 123);// Starting a new Activity with Bundle
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtras(bundle);
startActivity(intent);

在目标 Activity 中接收 Bundle 数据:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Bundle bundle = getIntent().getExtras();if (bundle != null) {String value = bundle.getString("key");int number = bundle.getInt("number");// Use the received data}
}

3. Activity 的动画和过渡效果

通过动画和过渡效果,可以提升应用的用户体验,使界面切换更加流畅和吸引人。

3.1 使用内置动画资源

Android 提供了一些内置的动画资源,可以直接使用。

// Applying a transition animation when starting a new Activity
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

3.2 使用自定义动画

可以自定义动画资源,并在 XML 文件中定义。

<!-- res/anim/slide_in_right.xml -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:fromXDelta="100%"android:toXDelta="0%"android:duration="300" /><!-- res/anim/slide_out_left.xml -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:fromXDelta="0%"android:toXDelta="-100%"android:duration="300" />

在代码中使用自定义动画:

Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

4. Activity 的导航和返回栈管理

Android 提供了多种方法来管理 Activity 的导航和返回栈。

4.1 使用 Intent 启动 Activity

通过 Intent 启动新 Activity 是最常见的方法。

Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

4.2 使用任务和返回栈

通过 Intent 标志,可以控制 Activity 在返回栈中的行为。

// Starting a new Activity in a new task
Intent intent = new Intent(this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);// Clearing the top of the stack and starting the Activity
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

4.3 使用导航组件

Android Jetpack 提供了导航组件,可以简化复杂的导航和返回栈管理。

<!-- Navigation graph in res/navigation/nav_graph.xml -->
<navigation xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"app:startDestination="@id/firstFragment"><fragmentandroid:id="@+id/firstFragment"android:name="com.example.FirstFragment"tools:layout="@layout/fragment_first"><actionandroid:id="@+id/action_firstFragment_to_secondFragment"app:destination="@id/secondFragment" /></fragment><fragmentandroid:id="@+id/secondFragment"android:name="com.example.SecondFragment"tools:layout="@layout/fragment_second" />
</navigation>

在代码中使用导航组件:

// Navigating to the second fragment
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
navController.navigate(R.id.action_firstFragment_to_secondFragment);

总结

通过对 Android Activity 的深入理解和灵活应用,可以实现丰富的用户体验和高效的应用程序。理解其生命周期、权限管理、数据传递、动画效果、导航和返回栈管理等方面的知识,有助于开发出性能优异且用户友好的应用程序。不断学习和实践这些知识,可以提升应用程序的质量和用户满意度。

欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

在这里插入图片描述

相关文章:

深入分析 Android Activity (六)

文章目录 深入分析 Android Activity (六)1. Activity 的权限管理1.1 在 Manifest 文件中声明权限1.2 运行时请求权限1.3 处理权限请求结果1.4 处理权限的最佳实践 2. Activity 的数据传递2.1 使用 Intent 传递数据2.2 使用 Bundle 传递复杂数据 3. Activity 的动画和过渡效果3…...

火箭升空AR虚拟三维仿真演示满足客户的多样化场景需求

在航空工业的协同研发领域&#xff0c;航空AR工业装配系统公司凭借前沿的AR增强现实技术&#xff0c;正引领一场革新。通过将虚拟信息无缝融入实际环境中&#xff0c;我们为工程师、设计师和技术专家提供了前所未有的共享和审查三维模型的能力&#xff0c;极大地提升了研发效率…...

LeetCode 279 —— 完全平方数

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此图利用动态规划进行求解&#xff0c;首先&#xff0c;我们求出小于 n n n 的所有完全平方数&#xff0c;存放在数组 squareNums 中。 定义 dp[n] 为和为 n n n 的完全平方数的最小数量&#xff0c;那么有状态…...

PHP发票真假API、医疗电子票据查验、发票识别接口开发示例

“营”“增”两种税是主流的流转税种&#xff0c;是两个独立而不能交叉的税种。也就是说交增值税的话就不交营业税&#xff0c;而交了营业税就不需要交增值税。而且&#xff0c;两者在征收的对象、征税范围、计税的依据、税目、税率以及征收管理等都有所不同&#xff0c;增值税…...

Python库之`lxml`的高级用法深度解析

Python库之lxml的高级用法深度解析 简介 lxml是一个功能强大的第三方库&#xff0c;它提供了对XML和HTML文档的高效处理能力。除了基本的解析和创建功能外&#xff0c;lxml还包含了一些高级用法&#xff0c;这些用法可以帮助开发者在处理复杂文档时更加得心应手。 高级解析技…...

参数的本质:详解 JavaScript 函数的参数

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 JavaScript 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 上篇文章…...

悲痛都会过去,唯有当下值得珍惜

在生活的长河中&#xff0c;我们都会经历各种各样的悲痛与挫折&#xff0c;无论是来自原生家庭的困扰&#xff0c;婚姻中的曲折&#xff0c;还是小时候的创伤、男女关系中的纠葛、校园时期的霸凌。然而&#xff0c;当我们回首过去&#xff0c;曾经以为无法逾越的痛苦&#xff0…...

第三方软件测试机构进行代码审计需要哪些专业的知识?

代码审计 进行代码审计需要专业的知识&#xff0c;包括编程语言、操作系统、数据库、网络知识以及安全知识等。 1.编程语言知识是进行代码审计的基础&#xff0c;因为你需要理解代码的语法和结构。对于不同的应用程序&#xff0c;你需要了解其所使用的编程语言的特点和语法规…...

Modal.method() 不显示头部的问题

ant-design中的Modal组件有两种用法&#xff1a; 第一种是用标签&#xff1a;<a-modal></a-modal> 第二种是用Api&#xff1a;Modal.info、Modal.warning、Modal.confirm...... 一开始项目中这两种用法是混用的&#xff0c;后面UI改造&#xff0c;需要统一样式&…...

Java中的内部类及其用途

一、技术难点 在Java中&#xff0c;内部类是一个定义在另一个类内部的类。这种嵌套的结构带来了一些技术上的难点和挑战&#xff1a; 访问控制&#xff1a;内部类可以直接访问外部类的所有成员&#xff08;包括私有成员&#xff09;&#xff0c;但外部类不能直接访问内部类的…...

堆(建堆算法,堆排序)

目录 一.什么是堆&#xff1f; 1.堆 2.堆的储存 二.堆结构的创建 1.头文件的声明&#xff1a; 2.向上调整 3.向下调整 4.源码&#xff1a; 三.建堆算法 1.向上建堆法 2.向下建堆法 四.堆排序 五.在文件中Top出最小的K个数 一.什么是堆&#xff1f; 1.堆 堆就…...

Linux内核重置root密码

Ubuntu 首先重新启动Ubuntu系统&#xff0c;然后快速按下shift键&#xff0c;以调出grub启动菜单在这里我们选择第二个&#xff08;Ubuntu高级选项&#xff09;&#xff0c;选中后按下Enter键 选择最高的Linux内核版本所对应的recovery mode模式&#xff0c;按e键编辑启动项 在…...

LaTex安装及配置(Windows)

LaTex安装及配置&#xff08;Windows&#xff09; 安装环境安装texlive下载texlive安装 编辑器安装texstudio下载texstudio安装 环境配置 使用第一个LaTex文档新建文件编程查看results 安装 环境安装 texlive下载 镜像清华源下载地址&#xff1a;https://mirrors.tuna.tsing…...

这才是满分毕业答辩PPT!

这才是满分毕业答辩PPT&#xff01; 2024年 毕业答辩论文指南 创新 正式 高效 正值毕业季&#xff0c;是不是很多同学&#xff0c;非常头疼如何进行论文答辩&#xff1f; 要想导师满意&#xff0c;顺利毕业&#xff0c;那么手里必须有份优秀的答辩PPT。这将是你的秘密武器&…...

【字典树(前缀树) 字符串】2416. 字符串的前缀分数和

本文涉及知识点 字典树&#xff08;前缀树) 字符串 LeetCode 2416. 字符串的前缀分数和 给你一个长度为 n 的数组 words &#xff0c;该数组由 非空 字符串组成。 定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。 例如&#xff0c;如果 words [“a”,…...

X-CSV-Reader:一个使用Rust实现CSV命令行读取器

&#x1f388;效果演示 ⚡️快速上手 依赖导入&#xff1a; cargo add csv读取实现&#xff1a; use std::error::Error; use std::fs::File; use std::path::Path;fn read_csv<P: AsRef<Path>>(filename: P) -> Result<(), Box<dyn Error>> {le…...

集成ECharts到若依框架:原理与使用方法详解

ECharts 是一个强大的开源数据可视化库&#xff0c;基于 JavaScript&#xff0c;能够创建丰富多彩的图表和交互数据展示。结合若依框架&#xff08;RuoYi&#xff09;&#xff0c;我们可以非常方便地将 ECharts 集成到系统中&#xff0c;实现数据的可视化展示。本文将详细介绍 …...

【机器学习】——线性模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…...

最全的Redis常用命令

Redis是一个开源的内存数据结构存储系统&#xff0c;用作数据库、缓存和消息代理。它支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;、哈希&#xff08;hashes&#xff09;、列表&#xff08;lists&#xff09;、集合&#xff08;sets&#xff09…...

sourcetree推送到git上面

官网&#xff1a;Sourcetree | Free Git GUI for Mac and Windows 下载到1次提交 下载后打开 点击跳过 下一步 名字邮箱 点击clone 把自己要上传的代码粘贴到里面去 返回点击远程->点击暂存所有 加载完毕后&#xff0c;输入提交内容提交 提交完成了 2次提交 把文件夹内的…...

CS Demo Manager:3步掌握免费CS比赛回放分析,快速提升竞技水平终极指南

CS Demo Manager&#xff1a;3步掌握免费CS比赛回放分析&#xff0c;快速提升竞技水平终极指南 【免费下载链接】cs-demo-manager Companion application for your Counter-Strike demos. 项目地址: https://gitcode.com/gh_mirrors/cs/cs-demo-manager CS Demo Manager…...

为什么你的DeepSeek总把“苹果”误判为涉政词汇?揭秘中文语义歧义消解的7步标准化清洗流程

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek敏感信息过滤的底层逻辑困境 DeepSeek系列模型在部署面向公众的API服务时&#xff0c;普遍引入了基于规则与轻量级分类器协同的敏感信息过滤层。该层并非嵌入于主推理路径中&#xff0c;而是作为独立…...

028、原理图ERC检查与常见错误排查

028 原理图ERC检查与常见错误排查 一次让我通宵的“悬空引脚”教训 几年前做一款工业控制板,原理图画完,自我感觉良好,直接丢给Layout工程师。结果板子回来,上电就烧了一路电源。查了两天,最后发现是一个运放的反馈引脚在原理图上画了线,但网络标号写错了——那个引脚实…...

联想刃7000K BIOS隐藏选项终极解锁指南:3步开启完整高级权限

联想刃7000K BIOS隐藏选项终极解锁指南&#xff1a;3步开启完整高级权限 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 想要充分发…...

ubuntu个人开发者如何利用taotoken token plan降低ai实验成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Ubuntu 个人开发者如何利用 Taotoken Token Plan 降低 AI 实验成本 对于在 Ubuntu 环境下进行 AI 实验与原型开发的个人开发者而言…...

Mac Mouse Fix技术架构深度解析:如何通过系统级事件拦截实现鼠标功能增强

Mac Mouse Fix技术架构深度解析&#xff1a;如何通过系统级事件拦截实现鼠标功能增强 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 在macOS生…...

书匠策AI毕业论文功能到底有多离谱?科普博主亲测后整个人都愣住了

各位被毕业论文折磨到怀疑人生的同学&#xff0c;我是你们的论文科普老朋友。 今天不讲文献怎么读、不讲选题怎么选&#xff0c;咱们换个画风——我花了整整一周&#xff0c;把书匠策AI&#xff08;h 官网直达&#xff1a;www.shujiangce.com微信搜一搜"书匠策AI"&a…...

2026年AI论文工具盘点:12款神器助你高效完成初稿生成、排版和降AI率

随着 AI 技术的持续突破&#xff0c;2026 年的论文写作工具市场已进入“智能化、精细化、合规化”的新阶段。从本科生的课程论文到研究生的学位论文&#xff0c;再到科研人员的期刊投稿&#xff0c;AI 工具正在为各类学术写作需求提供深度支持。无论是选题构思、文献检索&#…...

生产级MLOps鲁棒性实战:从数据漂移到模型监控的五大平台对比

1. 项目概述&#xff1a;为什么生产级机器学习系统必须关注鲁棒性&#xff1f; 在机器学习项目从实验室走向生产环境的漫长旅途中&#xff0c;我们常常会经历一个“高开低走”的尴尬局面&#xff1a;在精心准备的测试集上表现优异的模型&#xff0c;一旦部署上线&#xff0c;性…...

20 万行代码,30 分钟理清——Understand Anything 让你的代码库变成一张可交互的知识图谱

加入新团队&#xff0c;面对二十万行代码库&#xff0c;从哪开始读&#xff1f;读完本文你可以&#xff1a;用 3 条命令把项目变成可交互知识图谱&#xff0c;理解 5 代理分析管线的运作原理&#xff0c;并判断这个工具适合不适合你的场景。 &#x1f3af; 这个项目解决什么问题…...