4.0 4.1.3.1 组合导出属性和意图过滤器(对于活动) 我们已经解释了如何实现本指南中的四类活动:私有活动,公共活动,伙伴活动和内部活动。...由于这个漏洞,可能会将敏感信息发送到其他应用,或者应用可能会收到意外的返回值。 如上所示,使用意图过滤器,将隐式意图发送到私有应用,可能会导致意外行为,因此最好避免此设置。...使用这个方法有两个限制: 请求应用需要使用startActivityForResult()而不是startActivity()。 请求应用应该只从Activity调用。...发送到任务的根Activity的意图,被添加到任务历史中。 根活动是在任务中启动的第一个活动。 任何应用都可以通过使用ActivityManager类,读取添加到任务历史的意图。...例如,当默认活动由启动器启动时,此活动将是根活动。 根据 Android 规范,发送到根Activity的意图的内容可以从任意应用中读取。 因此,有必要采取对策,不要将敏感信息发送到根活动。
Intent 过滤器中控制应用在列表中的位置 2.安全问题 滥用Activity返回值 如果受害应用使用startActivityForResult(),攻击应用使用setResult()将数据传输到受害者应用的...用于获取用户选择的文件(文档、图象、视频)的URI,并在应用中进行处理(例如,将文件发送到服务器中),大多Android/Java无法将Android ContentResolver返回的InputSteam...数据发送到服务器中。...这可用于创建一个代理组件(活动、广播接收器或服务),该组件采用嵌入式意图并将其传递给危险方法,如startActivity()或 sendBroadcast()因此,可以强制应用启动无法直接从其他应用启动的未导出组件...如果应用对某些私有数据使用隐式Intent来启动Activity,则可以开始处理相同的操作来拦截私有数据。
在本节中,我们根据活动的使用情况,对 4 种活动进行了分类。 你可以通过下面的图表来找出,你应该创建哪种类型的活动。 由于安全编程最佳实践根据活动的使用方式而有所不同,因此我们也将解释活动的实现。...当使用仅在应用程序中使用的活动(私有活动)时,只要你对类使用显示意图,那么你不必担心将它意外发送到任何其他应用程序。 但是,第三方应用程序可能会读取用于启动活动的意图。...因此,如果你将敏感信息放入用于启动活动的意图中,有必要采取对策,来确保它不会被恶意第三方读取。 下面展示了如何创建私有活动的示例代码。 要点(创建活动): 1) 不要指定taskAffinity。...要点(使用活动): 4) 不要发送敏感信息。 5) 收到结果时,请仔细并安全地处理数据。...13) 由于目标应用是内部的,所以敏感信息只能由putExtra()发送。 14) 使用显式意图调用内部活动。 15) 即使数据来自内部应用,也要小心并安全地处理接收到的数据。
4.1.2.1 仅在应用内部使用的活动必须设置为私有(必需) 仅在单个应用中使用的活动,不需要能够从其他应用接收任何意图。...伙伴活动中间有些东西。 如上所述,当从活动中返回数据时,您需要注意来自目标应用的信息泄漏。...请参阅“4.1.3.5 使用活动时的日志输出”。 将敏感信息发送到活动时,您需要考虑信息泄露的风险。 您必须假设,发送到公共活动的Intent中的所有数据都可以由恶意第三方获取。...此外,根据实现,向伙伴或内部活动发送意图时,也存在各种信息泄漏的风险。 即使将数据发送到私有活动,也存在风险,意图中的数据可能通过LogCat泄漏。...例如,从启动器启动的活动始终是根活动。 根活动的更多详细信息,请参阅“4.1.3.3 发送到活动的意图”和“4.1.3.4 根活动”。
如何使用Hibernate映射文件将Java类映射到数据库表:Java类:package com.example.model;public class Employee { private int...="Department" column="department_id"/> class> class name="Department" table="departments">... class="increment"/> class>上述示例中,class>元素定义了Employee...类和Department类与数据库表的映射关系,元素定义了主键字段的映射,元素定义了普通字段的映射,元素定义了多对一关系的映射。
介绍 Elasticsearch有助于对数据进行全文搜索,而MongoDB则擅长存储数据。使用MongoDB存储数据和使用Elasticsearch进行搜索是一种常见的体系结构。...本教程将向您展示如何使用开源实用程序Transporter通过自定义转换将数据从MongoDB快速复制到Elasticsearch。...目标 在本文中,我们将介绍如何使用Transporter实用程序将数据从MongoDB复制到Ubuntu 14.04上的Elasticsearch 。...在将数据从MongoDB同步到Elasticsearch时,您可以在这里看到转换数据的真正力量。 假设我们希望存储在Elasticsearch中的文档有另一个名叫fullName的字段。...结论 现在我们知道如何使用Transporter将数据从MongoDB复制到Elasticsearch,以及如何在同步时将转换应用于我们的数据。您可以以相同的方式应用更复杂的转换。
新建一个BaseActivity类,右击包名,New,Java Class,输入BaseActivity。...List来暂存活动,然后提供了一个addActivity()方法用于向List中添加活动, 提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()...方法用于将List中存储的活动全部销毁掉。..., 然后在Base中重写onDestroy()方法,并调用ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。...如果有数据需要从一个活动传递到另一个活动中,也可以借助Intent完成。
* @param options 有关如何启动活动的其他选项....* 当此活动退出时,您的 * 将使用给定的请求代码调用onActivityResult()方法。...* 使用否定的requestCode与调用 * {@link#startActivity}(该活动不是作为子活动启动的)。...)/onResume()过程中 * 活动,则在显示结果之前不会显示窗口 * 从已启动的活动返回。...* @param options 有关如何启动活动的其他选项。
Java中的Context上下文 简单理解Context 源码中的Context Context能干什么 Context作用域 Intent的使用 使用显示Intent 使用隐式Intent 更多隐式...java 毫无疑问, java 目录是放置我们所有Java 代码的地方,展开该目录,你将看到我们刚才创建的HelloWorldActivity 文件就在里面。 res 这个目录下的内容就有点多了。...销毁当前活动 按一下Back()键,或使用: finish(); Java中的Context上下文 简单理解Context “环境”、“容器”,承上启下。...使用显示Intent 首先构建出了一个Intent ,传人FirstActivity.this 作为上下文,传入SecondActivity.class 作为目标活动,这样我们的“意图”就非常明显了...如果传递的是整型数据,则使用getintExtra方法;如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。
Abode reader 还使用 Google play 核心库进行动态代码加载。使用路径横向错误和动态代码加载,我能够实现远程代码执行。...例如,当带有数据 url 的意图http://localhost/test.pdf 被发送到 adobe reader 应用程序时,它会下载文件/sdcard/Downloads/Adobe Acrobat...downloadFile在将变量传递到文件实例之前,没有对变量进行任何清理,这导致了路径横向漏洞。...com.adobe.reader/files/splitcompat/1921618197/verified-splits/来自攻击者 apk 的类将自动添加到应用程序的 ClassLoader 中,并且从应用程序调用时将执行恶意代码...在使用我设备上安装的 play 核心库分析其他应用程序后,我看到 play 核心库还提供了从 /data/data/com.adobe.reader/files/splitcompat/:id/native-libraries
); /* * 调用Intent的putExtra方法来储存要传输的数据,以 “键值-对”的形式储存数据 */ intent.putExtra..., bitmap); /* * 这里将intent要传输的数据设置为Bundle对象,其实即使我们直接通过Intent对象的putExtra方法 *...接口来将我们要传递的自定义数据“序列化”,那么在这里,这个Parcelable接口的功能也是一样的,也是将一些复杂的数据序列化用于传输,两者的区别在于效率问题Parcelable接口的效率更高,但是使用起来更加复杂...,要实现接口中的一系列抽象方法用于将复杂的类型序列化,而Serializable接口使用简单,复杂的数据类型只需要用使用这个接口就行了,不需要我们去对这个数据类型序列化,序列化的过程由系统完成。...第三个方法sendObjectData中的Book类就是实现了serializable接口,之后通过intent的putExtra方法的重载实现的传递,我们来看一下Book.java: package
2、怎么使用活动(Activity) 定义Activity: 1 public class MainActivity extends Activity { 2 3 @Override 4...详情可参考:http://blog.csdn.net/hunanwy/article/details/8622433 或者 《第一行代码:Android》 P46 6、如何向下一个活动传递数据以及返回数据给上一个活动... 在启动活动时传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以将我们想要的数据暂存在Intent中,启动另一个活动后,只需要将这些数据取出就可以了。 ...(intent, 1); 7 8 } 9 }); 然后我们在SecondActivity中处理完之后,将返回的数据通过putExtra...Activity的前台生命周期:从调用onResume()到相应的调用onPause()。在此生命期中,活动总是处于运行状态下的,此时的活动是可以和用户进行交互的。 8、如何保存活动的状态?
使用intent在活动间传递值 首先是 MainActuvity 活动(注册界面 写完个人信息点击注册 ) 跳转到 In 活动 (通过 intent 获得 MainActivity 中的信息 ) 效果图如下...: MainActivity 实现: Java代码: public class Home extends AppCompatActivity { //用于存放个人注册信息 EditText....putExtra("code",user_code.getText().toString()); intent01.putExtra("year",user_year.getText...: Java代码: public class In extends AppCompatActivity { @Override protected void onCreate(Bundle...super.onCreate(savedInstanceState); setContentView(R.layout.activity_in); //获得MainActivity传进来的数据
对于App开发者来说,该功能的实现非常普通,使用Java编码不过以下两行代码而已: Intent intent = new Intent(MainActivity.this, LinearLayoutActivity.class...2、获取某个类的class对象,Java的写法是“类名.class”,而Kotlin的写法是“类名::class.java”,一看便知带有浓浓的Java风味; 看起来,Kotlin代码与Java代码半斤八两...,如果使用Java编码,可以很轻松地调用Intent对象的putExtra方法,通过“putExtra(参数名, 参数值)”的方式传递消息,就像下面代码那样: Intent intent = new...intent.putExtra("request_content", et_request.getText().toString()); startActivity(intent); 如果使用Anko...譬如前面的活动跳转传递了两个字段数据,如果把这两个字段放到Parcelable对象中,仅仅包含两个字段的Parcelable类对应的Java代码也如下面这般冗长: public class MessageInfo
传递数据:Intent可以携带额外的数据,可以将数据从一个组件传递到另一个组件,例如从一个活动传递数据给另一个活动。...Intent intent = new Intent(MainActivity.this, TargetActivity.class); startActivity(intent); 传递数据:可以使用...通过putExtra()方法将数据放入Intent中,然后在目标活动中通过getXXXExtra()方法获取数据。...intent.addCategory(Intent.CATEGORY_LAUNCHER); 4.Extra(附加数据):用于在Intent中传递额外的数据,可以使用putExtra()方法添加数据。..., TargetActivity.class); // 添加额外的数据 intent.putExtra("key", value); // 启动目标活动 startActivity(intent);
举例来说,有一个线程运行在后台从网络上下载数据,它可能会在onCreate()中创建线程,在onDestroy()中结束线程。...因为onPause()是唯一一个保证在进程被杀之前会调用的,因此你应该使用onPause()来写任何持久化存储数据。 被标记为No的方法保护活动寄宿的进程在他们调用的时候不会被杀掉。...(ActivityMain.this, Activity2.class); intent1.putExtra("activity1", text); startActivity(intent1....putExtra("activity1", text); startActivity(intent1 ); B.传对象,对象要实例化,继承Serializable Java代码 Bundle...用于多个Activity之间互相传递数据。 android的隐形管理员:Service Service从字面上理解即为“服务”,这里与windows中的服务有点类似。
答案就是活动跳转。 ① 普通跳转 顾名思义,就是单纯从A到B,不带任何内容。...Java //活动跳转,从MainActivity跳转到TestActivity,普通跳转 startActivity(new Intent(MainActivity.this,TestActivity.class...//TestActivity 为要跳转的页面 startActivity() 就这么简单,不管是从代码上还是从意思上都比Java要简洁明了,要这样使用的话你的Kotlin...Java //传递方 //活动跳转时传值 通过键值的方式传递 另一页面接收根据键来取值 Intent intent = new Intent(this,TestActivity.class...//接收int类型数据,使用getIntExtra,如果没有拿到值则用默认值, //接收String类型数据,使用getStringExtra,不用默认值.
在应用中能看到的东西都是放在活动中的。活动是安卓开发比较重要的东西,是用户交互和数据的入口。本篇博客要介绍的内容是活动的创建,活动的跳转与值的透传。...活动创建后会在资源目录中生成三个文件,如下图所示,java中的SecondActivity文件有前面的"C"标志可知,是Java的Class文件,也就是Activity对应的源文件。...详细的看一下如何去添加控件并监听控件的事件。...使用Intent进行Activity的跳转 Intent在Android开发中被誉为“意图”,从字面意思不难理解,就是“你打算去哪”。...3.从返回中的Activity中获取值 从上面的实例中可知,我们可以把值从一个Activity中传入到下一个Activity中。接下来要做的事情刚好相反,是从返回的页面中获取值。
思路很简单,Intent提供了一系列putExtra()方法的重载, 可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后, 再把这些数据从Intent中取出就可以了。...); intent.putExtra("extra_data",data); startActivity(intent); 我们使用显式Intent方式启动...SecondActivity,并通过putExtra()方法传递了一个字符串, 接收两个参数, 第一个参数是键,用于后面从Intent中取值, 第二个参数是要传递的数据。..., 没有指定任何“意图”,把要传递的数据存放在Intent中,调用setResult()方法, 专门用于向上一个活动返回数据的,接收两个参数, 第一个参数用于上一个活动返回处理结果,一般使用RESULT_OK...的值来判断数据来源, 确定数据是从SecondActivity返回的,在通过resultCode值来判断处理结果是否成功, 最后从data中取值打印出来。
需要签名权限的广播不受此限制所限,因为这些广播只会发送到使用相同证书签名的应用,而不是发送到设备上的所有应用。...在许多情况下,之前注册隐式广播的应用使用 JobScheduler 作业可以获得类似的功能。 例如,一款社交照片应用可能需要不时地执行数据清理,并且倾向于在设备连接到充电器时执行此操作。...为了迁移到 Android 8.0 或更高版本,应用将该接收器从其清单中移除。 应用将清理作业安排在设备处于空闲状态和充电时运行。 请注意:很多隐式广播当前已不受此限制所限。...signatureOrSystem权限适用于以下特殊情况:多个供应商将应用内置到一个系统映像中,并且需要明确共享特定功能,因为这些功能是一起构建的。...setClass(等同于添加component)var intent = Intent("com.xx.xx.message2") intent.setClass(this, CustomReceiver2::class.java
领取专属 10元无门槛券
手把手带您无忧上云