intent

Android四大组件:BroadcastReceiver 介绍

為{幸葍}努か 提交于 2019-11-28 16:02:30
介绍 BroadcastReceiver 即广播组件,是 Android 的四大组件之一。 用于监听和接收广播消息,并做出响应 。有以下一些应用: 不同组件之间的通信(应用内或不同应用之间)。 多线程之间通信。 与系统在特定情况下(例如,电话呼入时、网络可用时)的通信。 原理 Android 中的广播机制使用了 观察者设计模式:基于消息的发布、订阅事件模型 。因此,广播的发送者和接收者解耦,使得系统方便集成,更容易扩展。 模型中有三个角色: 消息订阅者(广播接收者) 消息发布者(广播发送者) 消息中心( ActivityManagerService ) 整个模型过程如下: 广播接收者通过 Binder 机制在 AMS 中注册订阅广播。 广播发送者通过 Binder 机制向 AMS 发送广播。 AMS 根据广播发送者要求(IntentFilter、Permission),在已注册列表中寻找适合的接收者。 AMS 将广播发送到合适的广播接收者相应的消息循环队列中。 广播接收者通过消息循环拿到广播,并回调 onReceive() 方法。 注:广播发送者和接收者的执行是异步的,发送者不会关心有无接收者接收,也不确定接收者何时才能接收到。 使用 步骤1:自定义广播接收器 继承 BroadcastReceiver 基类,并复写抽象方法 onReceive() 。默认情况下

解决安卓webview不支持input type=file问题

萝らか妹 提交于 2019-11-28 15:55:51
前端页面中一句话,<input type="file" accept="image/*;capture=camera">, IOS手机中,可以直接呼起相机和相册; 安卓手机则不行,部分浏览器没问题; 为解决问题,直接上代码; 亲测,华为、小米、三星、360、魅族都可以正常调用摄像头及相册 webview.setWebChromeClient(new WebChromeClient() { @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { mUploadCallbackAboveL = filePathCallback; take(); return true; } //<3.0 public void openFileChooser(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; take(); } //>3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {

Appium+python自动化(三十五)- 命令启动appium之 appium服务命令行参数(超详解)

左心房为你撑大大i 提交于 2019-11-28 15:34:56
简介 前边介绍的都是通过按钮点击启动按钮来启动appium服务,有的小伙伴或者童鞋们乍一听可能不信,或者会问如何通过命令行启动appium服务呢?且听宏哥一一道来。 一睹为快 其实相当的简单,不看不知道,一看吓一跳,直接在docs命令窗口输入命令:appium 就可以运行起appium 这回小伙伴和童鞋们相信了吧,都启动来了。 第一行:欢迎使用Appium,版本 v1.8.1 第二行:Appium启动成功,启动ip为默认的 0.0.0.0,端口为默认的 4723;默认即表示“不指定”的情况下; 默认端口4723。此时小伙伴或者童鞋们又会问,那么如何修改端口了,不要急,听宏哥慢慢地道来。 修改appium启动端口 appium启动默认端口4723,如果要指定端口,通过以下命令:appium -p 端口号,例图修改端口4725 2个端口 指定端口的设备,输入命令:appium -p 端口1 -bp 端口2 设备编号 appium -a 127.0.0.1 -p 4723 --session-override -a 是指定监听的ip(也可写成 --address),后面“127.0.0.1”可以改为你需要的ip地址; -p 是指定监听的端口(也可写成 --port),也可以修改为你需要的端口; --session-override 是指覆盖之前的session; appium -a

学习笔记-翻译资料:Android 2.3.3 近场通信NFC介绍

好久不见. 提交于 2019-11-28 14:10:29
NFC( 近场通信 ) NFC 是一套短距离的无线通信,通常距离是 4 厘米或更短。 NFC 工作频率是 13.56M Hz, 传输速率是 106kbit/s 到 848kbit/s. NFC 总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。 与其他无线通信技术比较, 例如蓝牙和 WiFi , NFC 提供更低带宽和距离,并且低成本,不需要供电,不需要实现匹配,整个通信过程仅仅是短短的靠近一秒就能完成。 一个带有 NFC 支持的 android 设备通常是一个发起者。也可以作为 NFC 的读写设备。他将检测 NFC tags 并且打开一个 Activity 来处理 . Android 2.3.3 还有支持有限的 P2P 。 Tags 分很多种,其中简单的只提供读写段,有的只能读。复杂的 tags 可以支持一些运算,加密来控制对 tags 里数据段的读写。甚至一些 tags 上有简单的操作系统,允许一些复杂的交互和可以执行一些代码。 API 概览 Android.nfc package 包含顶层类用来与本地 NFC 适配器交互 . 这些类可以表示被检测到的 tags 和用 NDEF 数据格式。 Class Description NfcManager 一个 NFC adapter

Android大图片裁剪解决方案

浪子不回头ぞ 提交于 2019-11-28 13:43:58
截图原理 在Android中,Intent触发Camera程序,拍好照片后,将会返回数据,但是考虑到内存问题,Camera不会将全尺寸的图像返回给调用的Activity,一般情况下,有可能返回的是缩略图,比如120*160px。 这是为什么呢?这不是一个Bug,而是经过精心设计的,却对开发者不透明。 以我的小米手机为例,摄像头800W像素,根据我目前设置拍出来的图片尺寸为3200*2400px。有人说,那就返回呗,大不了耗1-2M的内存,不错,这个尺寸的图片确实只有1.8M左右的大小。但是你想不到的是,这个尺寸对应的Bitmap会耗光你应用程序的所有内存。Android出于安全性考虑,只会给你一个寒碜的缩略图。 在Android2.3中,默认的Bitmap为32位,类型是ARGB_8888,也就意味着一个像素点占用4个字节的内存。我们来做一个简单的计算题:3200*2400*4 bytes = 30M。 如此惊人的数字!哪怕你愿意为一张生命周期超不过10s的位图愿意耗费这么巨大的内存,Android也不会答应的。 1 Mobile devices typically have constrained system resources. 2 Android devices can have as little as 16MB of memory available to a

Activity intent经常使用的 FLAG 集合

有些话、适合烂在心里 提交于 2019-11-28 12:07:36
首先简单说下Task和Activity的关系。 Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西(Activity)则会处于最下面,最后添加的东西(Activity)则会在最上面。从Task中取出东西(Activity)是从最顶端取出,也就是说最先取出的是最后添加的东西(Activity),以此类推,最后取出的是第一次添加的Activity,而Activity在Task中的顺序是可以控制的,在Activity跳转时用到Intent Flag可以设置新建activity的创建方式; Intent.FLAG_ACTIVITY_NEW_TASK 默认的跳转类型,会重新创建一个新的Activity,不过与这种情况,比方说Task1中有A,B,C三个Activity,此时在C中启动D的话,如果在Manifest.xml文件中给D添加了Affinity的值和Task中的不一样的话,则会在新标记的Affinity所存在的Task中压入这个Activity。如果是默认的或者指定的Affinity和Task一样的话,就和标准模式一样了启动一个新的Activity. FLAG_ACTIVITY_SINGLE_TOP 这个FLAG就相当于加载模式中的singletop,比如说原来栈中情况是A,B,C,D在D中启动D,栈中的情况还是A,B,C,D FLAG_ACTIVITY

Activity的启动模式与flag详解

冷暖自知 提交于 2019-11-28 12:07:25
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别: standard:Activity的默认加载方法,即使某个Activity在 Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。 singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了

startActivityForResult用法详解

核能气质少年 提交于 2019-11-28 12:07:06
一、如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。 package com.ljq.activitys; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private final static String TAG = " MainActivity " ; @Override public void onCreate(Bundle savedInstanceState) { super

Android零基础入门第83节:Activity间数据传递方法汇总

ⅰ亾dé卋堺 提交于 2019-11-28 12:06:40
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递。 一、常用数据类型 在前面几节我们只学习了一些常用类型的数据传递,主要是以下这些重载方法: putExtra(String name, boolean value) putExtra(String name, byte value) putExtra(String name, char value) putExtra(String name, short value) putExtra(String name, int value) putExtra(String name, long value) putExtra(String name, float value) putExtra(String name, double value) putExtra(String name, String value) putExtra(String name, CharSequence value) putExtras(Intent src) putExtras(Bundle extras) putExtra(String name, Bundle value) getBooleanExtra(String name, boolean

Android零基础入门第82节:Activity数据回传

落爺英雄遲暮 提交于 2019-11-28 12:06:13
上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity。 一、简介 前面己经提到,Activity 还提供了一个 startActivityForResult(Intent intent, int requestCode) 方法来启动其他Activity。该方法用于启动指定Activity,而且期望获取指定Activity返回的结果。这种请求对于实际应用也是很常见的,例如应用程序第一个界面需要用户进行选择——但需要选择的列表数据比较复杂,必须启动另一个Activity让用户选择。当用户在第二个Activity 中选择完成后,程序返回第一个Activity,第一个Activity必须能获取并显示用户在第二个 Activity中选择的结果。在这种应用场景下,也是通过Bundle进行数据交换的。 为了获取被启动的Activity所返回的结果,需要从以下三方面着手。 使用startActivityForResult(Intent intent, int requestCode) 方法启动指定Activity。 当前 Activity 需要重写 onActivityResult(int requestCode,int resultCode,Intent intent),