一、函数指针做函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., int); 定义函数 接收 pFun_add 类型的形参作为参数 , 该类型是 函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数中调用 函数指针 指向的 函数 ; // 传入函数指针...其它函数中执行 ; 4、函数指针做参数意义 函数指针做参数意义 : 提高程序灵活性 : 通过使用函数指针作函数参数 , 这样可以 在 程序 运行时 动态地 设置 要调用的函数 , 提高了程序的灵活性...; 解耦 任务调用 与 任务实现 : 厂商提供 任务实现 , 系统集成商 调用 厂商实现的任务 , 此时 系统集成商 只需要写好 软件框架 , 调用 厂商提供的 任务实现即可 ; 更好的代码组织 :...; 错误处理 : 使用函数指针 , 将错误处理函数作为参数传递给其他函数 , 在发生错误时立即调用适当的错误处理函数 , 无需返回到调用堆栈中的较高层次 ; 二、代码示例 - 函数指针做函数参数 代码示例
在Android7.0上调用系统相机拍照,裁切照片 调用系统相机拍照 在Android7.0之前,如果你想调用系统相机拍照可以通过以下代码来进行: File file=new File(Environment.getExternalStorageDirectory...authority参数就是清单文件中注册provider的android:authorities="com.jph.takephoto.fileprovider"。...无论是应用部分还是全部低电耗模式限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。...应对策略:Android 框架提供多个解决方案来缓解对这些隐式广播的需求。...您甚至可以使用 JobScheduler API 来适应内容提供程序变化。 另外,大家如果想了解更多关于后台的优化可查阅后台优化。
您将不会收到关于何时开始的任何信息 * 活动退出。此实现将覆盖基本版本, * 提供关于 * 执行启动的活动。...* 当此活动退出时,您的 * 将使用给定的请求代码调用onActivityResult()方法。...* 使用否定的requestCode与调用 * {@link#startActivity}(该活动不是作为子活动启动的)。...7 个参数 , 函数原型为 : public class Instrumentation { /** * 执行应用程序发出的startActivity调用。...* @param target 哪个活动正在执行启动(并因此接收任何结果);如果未进行此调用,则可能为null从一项活动中。 * @param intent 启动的实际意图。
简介 相机模块库,自定义相机,通过简单的调用即可实现拍照、图片裁剪、录像及录像抓拍功能; 实现图片压缩,减少图片体积;自定义相机可避免使用系统相机导致的照片或视频体积过大问题; 内置相机及sd卡权限获取的处理...:syd-camera:v1.0.0' } 使用 拍照 具体使用可参考demo中的CameraTestActivity 启动相机 参照以下方式传入图片质量、照片最小宽度配置、相机预览界面最小宽度配置,...直接跳转到拍照界面进行拍照; 相关的配置参数: – picQuality:图片质量0~100,默认80 – picWidth:照片最小宽度配置,默认800 – previewWidth:...cropDestPicPath); break; default: break; } 自定义图片裁剪UI 若需要自定义裁剪界面U,可参考SydCropActivity,自定义布局 录像功能 参照以下方式传入相关参数...,直接跳转到录像界面进行录像; 相关的配置参数: – picQuality:录像质量0~100,默认80 – picWidth:视频最小宽度配置,默认800 – previewWidth
思路很简单,Intent提供了一系列putExtra()方法的重载, 可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后, 再把这些数据从Intent中取出就可以了。...startActivity(intent); 我们使用显式Intent方式启动SecondActivity,并通过putExtra()方法传递了一个字符串, 接收两个参数, 第一个参数是键,用于后面从..., 然后调用getStringExtra()方法,传入相应键值,就可以得到传递的数据, 由于传递的是字符串,所以调用该方法,如果传递的是整型则使用 getIntExtra(),如果是布尔型 则用,...“意图”,把要传递的数据存放在Intent中,调用setResult()方法, 专门用于向上一个活动返回数据的,接收两个参数, 第一个参数用于上一个活动返回处理结果,一般使用RESULT_OK和RESULT_CANCELED...由于使用的是startActivityForResult()方法启动的SecondActivity的, 在被销毁之后会回调上一个活动的onActivityResult()方法,因此需要重写这个方法:
().uid); //这种方案适用于 API21——25,即 5.0——7.1 之间的版本可以使用 intent.putExtra("app_package...渠道名称是给用户看的,需要能够表达清楚这个渠道的用途。重要等级的不同则会决定通知的不同行为,当然这里只是初始状态下的重要等级,用户可以随时手动更改某个渠道的重要等级,App是无法干预的。...创建通知渠道的这部分代码,你可以写在MainActivity中,也可以写在Application中,实际上可以写在程序的任何位置,只需要保证在通知弹出之前调用就可以了。...并且创建通知渠道的代码只在第一次执行的时候才会创建,以后每次执行创建代码系统会检测到该通知渠道已经存在了,因此不会重复创建,也并不会影响任何效率。 通知渠道一旦创建之后就不能再通过代码修改了。...这里不用根据api等级手动设置NotificationCompat.Builder参数的个数,8.0以上版本是2个参数,8.0以下是1个参数,在.build()的时候源码里面会自动根据系统的api等级做出相应的判断
.fileProvider", pictureFile ); 第二个参数就是我们在androidManife.xml 中的provider的参数authorities 第三个参数是指定的文件File...intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 2、使用函数进行授权和移除权限...1、如果不使用下面的函数授权,就会出现java.lang.SecurityException: Permission Denial的错误 2、使用了下面的函数授权,可以正常返回。...BuildConfig.APPLICATION_ID + ".fileProvider", outputImageFile); intent.setDataAndType(contentUri, "image/*"); //使用函数授权...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如果一个导出的Service没有做严格的限制,任何应用可以去启动并且绑定到这个Service上,取决于被暴露的功能,这有可能使得一个应用去执行未授权的行为,获取敏感信息或者是污染修改内部应用的状态造成威胁...,那么恶意构造的APP都可以对此Service传入恰当的参数进行调用,导致恶意的行为发生比如说调用具有system权限的删除卸载服务删除卸载其他应用。...service接收到的数据需谨慎处理。 内部service需使用签名级别的protectionLevel来判断是否为内部应用调用。...不应在service创建(onCreate方法被调用)的时候决定是否提供服务,应在onStartCommand/onBind/onHandleIntent等方法被调用的时候做判断。...当service又返回数据的时候,因判断数据接收app是否又信息泄露的风险。 有明确的服务需调用时使用显示意图。 尽量不发送敏感信息。
以后使用recycle方法进行回收,该方法也可以不主动调用,因为垃圾回收器会自动收集不可用的Bitmap对象进行回收 recycle方法会判断Bitmap在不可用的情况下,将发送指令到垃圾回收器,让其回收...是个泛型类,内部采用LinkedHashMap来实现缓存机制,它提供get方法和put方法来获取缓存和添加缓存,其最重要的方法trimToSize是用来移除最少使用的缓存和使用最久的缓存,并添加最新的缓存到队列中...用Canvas绘制位图的的情况。 在用Canvas绘制位图时,一般地,我们使用drawBitmap函数家族, 在这些函数中,都有一个Paint参数, 要做到防止锯齿,我们就要使用到这个参数。...最后,在画图的时候,调用drawBitmap函数,只需要将整个Paint传入即可。 有时候,当你做RotateAnimation时, 你会发现,讨厌的锯齿又出现了。...2)当你在画图的时候, 如果是View则在onDraw当中,如果是ViewGroup则在dispatchDraw中调用如下函数。
Intent漏洞 1.Intent 类型 显示Intent 显式Intent通过提供目标应用的包名称或完全限定的组件类名来指定哪个应用程序将满足意向。 即需要明确组件类名。...如 例如,如果你在应用中构建一个名为DownloadService的服务,用于从Web下载文件,可以使用以下代码启动: // Executed in an Activity, so 'this' is...则可以使用隐式 Intent调用startActivity(),请求另一具有此功能的应用共享内容。 // Create the text message with a string....,或授予自己对应用内容提供商的访问权限。...导出限制意味着您无法直接访问 AuthWebViewActivity,并且直接调用会抛出 java.lang.SecurityException,并拒绝权限:AuthWebViewActivity 未从
但是Android Q以下版本必须要申请权限才可以访问。...拍照 图片正常保存 拍照:Android Q之前版本使用的,将图片保存到指定文件夹,拍照完成后需要通知相册刷新 拍照代码 // 拍照存放路径 File fileDir = new File(...,有需要的可以直接复制就行 将图片保存到沙盒内 沙盒里面操作文件不再需要申请权限 沙盒中新建文件夹只能再系统指定的子文件夹中新建 Android Q版本使用,将图片存放到沙盒文件内,图库无法刷新,无法显示...(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, 1111); 这个不用调用代码刷新相册库,因为刷新了也不能显示?...Uri uri = null; // 设置保存参数到ContentValues中 ContentValues contentValues = new ContentValues();
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将...Intent传递给调用的组件,并完成组件的调用。...因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。 ? 1....Intent作用 Intent是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由 Intent来协助完成 Android各个组件之间的通讯。...任何数量的Category 描述都可以添加到Intent中,但是很多intent不需要category,下面列举一些常用的category: 类型 作用 CATEGORY_DEFAULT 把一个组件Component
酷炫的外部开启Activity新姿势 在H5页面疯狂的今天,H5和Native的交互就至关重要,而且交互的方式有很多,google提供了一个公共的方式:js与native互调,即js可以调用Native...不过今天要讲的并不是Url拦截的方式和JavaScript注入方式,因为这种交互方式存在着不少问题: 1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情...、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法 2、Java 调用 js 的函数、没有返回值、调用了就控制不到了 3、Js...调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多...除了在外部app可以打开,在内部也可以使用这个方法,同样H5页面也可,这样APP之间的交互就方便多了,不过具体的还是要和业务相关联 更多参数可以自己根据业务来定,这里只是给大家一个启发。
拓展:获取图片方式 4.1 通过绝对路径获取图片 4.2 通过Uri获取资源流 4.3 通过cursor获取图片 相机 以下,调用相机的代码出自开源项目 SelectImgAsWechath 。...不鼓励这种曝光,因为接收应用可能无法访问共享路径。...(MediaStore.EXTRA_DURATION_LIMIT, 30); // 调用前置摄像头 intent.putExtra("android.intent.extras.CAMERA_FACING...FileProvider是android support v4包提供的,是ContentProvider的子类,便于将自己app的数据提供给其他app访问。...,这和Uri有关系,因为我们的Uri不是目标文件的绝对路径,所以查询不到任何东西。
对于iOS环境上,简单的两个配置就OK啦 即只需在配置里加上摄像头和麦克风的使用权限。...这里,用户在h5上点击文件,我们以下环节实现的WebChromeClient中,基于不同Android的api版本中的回调函数会被触发: public class EssWebChromeClient...,openFileChooser函数中会有一个acceptType的参数; 这个参数实际上是对应我们H5那个input框中的accept属性,需要我们关注: accept 属性是一个字符串,它定义了文件...一个不带扩展名的 MIME 类型字符串。 字符串 audio/*, 表示“任何音频文件”。 字符串 video/*,表示 “任何视频文件”。 字符串 image/*,表示 “任何图片文件”。...来掉用起回调函数。
2、性能 (1)由于项目调用android camera api,所以需要在androidmanifest.xml中写入开启调用camera api权限的代码,否则项目会因权限不够而无法运行调用camera...第四部分、系统实现 Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android...准备工作 上面调用系统Camera App,我们压根不需要任何权限,但是这里用Camera API,就必须在manifest内声明使用权限,通常由以下三项 <uses-permission android...函数中,使用Camera的Open函数开机摄像头硬件,这个API在SDK 2.3之前,是没有参数的,2.3以后支持多摄像头,所以开启前可以通过getNumberOfCameras先获取摄像头数目,再通过...的surfaceChanged函数中调用getParameters函数得到已打开的摄像头的配置参数Parameters对象,如果有需要就修改对象的参数,然后调用setParameters函数设置进去(SDK2.2
通常,如前所述,最好避免依赖任何给定 API 的默认行为的实现;此外,如果存在明确的方法(如导出属性)来启用重要的安全相关设置,那么使用这些方法总是一个好主意。...即使在相同的应用中将广播发送到私有接收器,其他应用中的公共接收器也可能会意外调用。 这就是为什么禁止指定带有意图过滤器定义的exported ="false"。 以下两张图展示了意外调用的发生情况。...所以不会有任何安全问题。 (请参阅图中的橙色箭头标记。)从安全角度来看,问题是应用 A 对同一应用中的私有接收器的调用。...应用只有在第一次启动后才能接收广播;因此,安装后无法使用接收的广播作为启动操作的触发器。...因此,当不需要粘性广播时,需要显式调用removeStickyBroadcast()来删除粘滞广播。 此外,带有特定权限的受限的广播接收器无法接收广播。
三. infix 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式允许我们使用一个单词或字母来当运算符用(其本质还是函数调用),忽略调用的点和圆括号。...Kotlin的中缀表达式,需要满足以下条件: 使用infix修饰 只有一个参数 其参数不得接受可变数量的参数且不能有默认值。...四. inline Kotlin 天生支持函数式编程,高阶函数和 lambda 是其一大特色。 使用高阶函数会带来一些运行时间效率的损失:每一个函数都是一个对象,并且都会捕获一个闭包。...即那些在函数体内会被访问的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。 使用 inline 修饰的函数,可以从编译器角度将函数的函数体复制到调用处实现内联。...翻看 Kotlin 的 Standard.kt 可以发现它里面的函数 with、apply、run、let 等都使用了 inline。
① 普通跳转 顾名思义,就是单纯从A到B,不带任何内容。...② 传递数据 实际开发中的页面跳转都不会是单纯的跳转,肯定会携带一些参数的。...Activity运用不同的启动模式,显然固定的launchMode属性无法满足找个需求。...所以Android允许在代码中手动设置启动表示,这样在不同时候调用startActivity方法就能运行特定的启动模式。...FLAG_ACTIVITY_NEW_TASK 使用,即setFlags的参数为“Intent.FLAG_ACTIVITY_CLEAR_TASK 启动模式在Java中是比较琐碎的,在Kotlin中则通过
对于App开发者来说,该功能的实现非常普通,使用Java编码不过以下两行代码而已: Intent intent = new Intent(MainActivity.this, LinearLayoutActivity.class...); startActivity(intent); 上面代码的关键之处在于Intent的构造函数,其中第一个参数指定了页面跳转动作的来源,即MainActivity这个源页面,MainActivity.this...,如果使用Java编码,可以很轻松地调用Intent对象的putExtra方法,通过“putExtra(参数名, 参数值)”的方式传递消息,就像下面代码那样: Intent intent = new...的简化写法,其实也很容易,只要在startActivity后面的括号中依次填上每个参数字段的字段名和字段值,具体的Kotlin跳转代码如下所示: //第一种写法,参数名和参数值使用关键字to隔开...所以Anko库提供了另一种符合习惯的写法,也就是利用Pair类把参数名和参数值进行配对,Pair的第一个参数为字段名,第二个参数为字段值。
领取专属 10元无门槛券
手把手带您无忧上云