启动一个外部的activity(APK)的方法.
启动一个外部的acitivity的方法有很多,基本上归类为2种,隐性和显性,区别是一个是知道另外一个APK的包名和启动的activity,另外一个是只知道activity设定的name,
针对实例:ApkA启动ApkB的话.
针对隐性,只要
ApkB在manifest中设置:
ApkA启动
Intent apk1=new Intent();
apk1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
apk1.setAction("com.aspire.demo_test1.DemoTestActivity1");
this.startActivity(apk1);
即可.
针对显性,只要
ApkA启动:
Intent apk1=new Intent();
apk1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
apk1.setClassName("com.aspire.demo_test1", "com.aspire.demo_test1.DemoTestActivity1"); this.startActivity(apk1);
即可.
区别就是ApkB是否需要设置.和ApkA是否已知ApkB的启动包和类.
多个同一APK中的activity同屏显示:
首先你的activity不要extends Activity,而要写成extends ActivityGroup
然后程序中.
protected LocalActivityManager mLocalActivityManager = null;
mLocalActivityManager =getLocalActivityManager();
Intent apk1=new Intent();
apk1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
apk1.setClassName("com.aspire.demo_test1", "com.aspire.demo_test1.DemoTestActivity1"); Window w = mLocalActivityManager.startActivity("tab1", apk1);
View wd1=w.getDecorView();
这里返回的view就是另外一个activity的显示实例.可以获得多个activity的实例然后按照正常的UI组件设计设置layout.
多个非同一APK中的acitivity同屏显示.
基本使用方法和上面的同一APK中的使用方法一样,但是需要在这几个APK的manifest中进行设置android:sharedUserId="com.aspire",因为android的安全机制认为非指定共享的数据别人是无法访问的,因此要在自己的apk中使用别人的apk中的数据的话,要进行设置.
这里还需要特别注意的.如果是设置了同一sharedUserId,却数字签名不同的话,程序是不允许安装的,因此如果想在自己的程序中调用别的activity的组件作为自己的一个view的话,比需要实现2点:
1.设置android:sharedUserId.
2.使用相同的数字签名
注意:
1.如果在调用当中,某个组件直接执行startActivity(XXX);等操作的话,整个界面将会被新的Activity接管,而非画面的局部被接管.这点在开发上是要注意的,避免一些需要的内容被覆盖.
2.菜单方面问题,当ApkA和ApkB同时都是初始化启动并且都有菜单的情况,则2个菜单会累加后显示,但是如果是启动了ApkA之后(初始化之后),再启动的ApkB,则菜单只有ApkA的,因此如果需要菜单方面的定制,则注意开发时候,必须重新初始化菜单.
扩展性:
因为多个activity的同时显示成为可能,所以将android做成类似于windows这种一个桌面可以显示多个窗口(window)的样子.不过真机测试的情况下随着程序的增多速度有所减慢.
参考内容:
此次尝试的思路来自于TabActivity,Tabhost的实现和对其源码的跟踪. 感谢金田对manifest 的技术支持和华友ActivityGroup的分析.
轿车一键启动无法启动上电的故障原因现在轿车各个控制执行检测环节都是用的电子产品,更新换代的速度和维修水平很难保持同步,一些维修点普遍使用替换的方法去排除故障,如果替换下来的是正常的,很少在维修点再给你更换下来,最后打包收费,增加了消费者负担,有时候十几块钱的问题,要花费几百甚至上千元才能解决问题。 下面就拿一键启动出现的故障分析原因和检修思路,一般一键启动出问题修好大约1000元以上,实际费用根本到不了。 车型:比亚迪系列l3、G3、G6 故障现象:停车后,再启动,检测钥匙正常,按一键启动按钮,没反应,整车不上电,启动灯变绿,按后绿灯闪烁。 原因初步分析:一键启动工作原理是检测到钥匙通讯信号后,踩下离合或者刹车,位置检测开关闭合,低电位有效,指示灯变绿,按下按钮,送给车身控制模块BCM(acc)高电位有效指令,BCM模块20脚输出高电平到继电器IG1,继电器闭合仪表整车供电。 BCM的继电器驱动20脚输出高电平受一下几个监测点的约束。 1:离合和刹车的位置检测状态 2:转向柱锁的信号状态, 3:启动按钮的状态, 4:钥匙和汽车ECU的通讯状态 下面逐步分析每个状态产生的故障现象 1:离合器或者制动位置不闭合,故障现象指示灯不变绿,按键后,
整车可以上电,转向柱可以解锁,但起动机无反应2:转向柱锁电机动作迟缓或者损坏,故障现象见标题3:按钮不闭合,整车无反应,但绿色指示灯不会闪烁4;显示检测不到钥匙 下附电气原理图
就本故障阐述检修思路
首先检查转向柱锁,拔下转向柱锁插头G28,测量个脚电压值是否和下表一致
如果G28插口2脚没有11-14v电压,他各脚电压会全部不正常,拔下G49测量线束无断线,即可判断车身控制模块BCM故障,更换BCM模块 判断模块是否正常:测量模块G49插口5脚是否有11-14v电压,如有检查线束,无电压更换模块。 本故障更换BCM 车身控制模块故障排除, 需要特别说明的是:有些启动无反应,转动方向盘位置后可以启动,原因是转向轴锁霍尔元件检测闭锁信号不正常所致,不属于实体故障原因
一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init.
Android开发技术讲义之启动另一个 Activity 紧接着上一个练习,我们为上一个练习app添加一些代码,使之当我们点击send 按钮的时候能够启动另一个Activity。 任务 在文本框中输入消息,点击Send按钮,消息会显示在第二个Activity中。 对发送按钮进行响应 1.在res/layout目录中,编辑activity_my.xml 2.在
该属性的属性值"sendMessage",是当点击按钮的时候系统调用的方法名 3.在java/com.mycompanu.myfirstapp目录中,打开MyActivity.java文件 4.在MyActivity类中,添加sendMessage()方法 java/com.mycompany.myfirstapp/MyActivity.java 为了匹配android:onClick属性值,该方法必须满足: ●是public ●返回值为void ●有且仅有一个View作为参数 创建一个Intent 1.在MyActivity.java中的sendMessage()方法中,创建一个Intent启动一个名 为DisplayMessageActivity的Activity java/com.mycompany.myfirstapp/MyActivity.java 注意:此时对DisplayMessageActivity的调用会显示出错,我们这时可以先忽略错误 这里,Intent构造方法用到了两个参数: ●Context作为第一个参数(这里是this,因为Activity是Context的子类) ●第二个参数为系统发送Intent的目标,为某应用组件的Class 2.在本文件的前面,引入Intent类: java/com.mycompany.myfirstapp/MyActivity.java
产品简介: 智能一键启动系统,基本版包含:无钥匙进入系统,一键启动系统,智能防盗系统;其具体技术和性能表现如下所叙。 采用技术: 无钥匙进入系统是基于目前高端车型普遍采用的PKE 密码安全链接防盗技术和RFID 射频身份识别技术完美结合的高科技产品。 智能钥匙牌开门解除防盗: 有了这项技术,您的爱车就像长了双眼睛,会识人,当您走近车辆1—2M 时,车会自动为您开门,闪灯,让您无需找遥控或钥匙开门锁,拉门即可上车,方便时尚,让您朋友感觉您的车不曾上锁,你真酷啊!当您大包小包抱满手臂时,方便性就更不用说了(这是因为智能钥匙牌进入RFID 射频识别感应区,并且密码链接正确,爱车才会如此反应);智能钥匙牌只有唯一两块有效,如果丢失,请立即申报补办,丢失那块会自动失效。 波特密码开门解除防盗: 当您爱车钥匙牌无电,丢失,损坏,被调成手动模式锁在车内,或附近强电磁干扰,或您带钥匙牌远离爱车,需要就近的朋友代驾,或朋友借车等,都可以不用钥匙牌,直接敲击预先装在挡风玻璃处的七段波特码,输入正确密码后,车会自动解除防盗开门,上车30秒内踩刹车按启动键即可启动汽车操作,如不操作30秒后自动上锁,需要重新敲击密码;波特密码可以设置成1—8位数字,敲击和密码设置都非常简单方便,车被借用后,回来直接更改密码就行,无需借钥匙牌,最大限度的降低汽车防盗风险。如果密码被人试用3次不正确,密码会锁定30分钟不能输入,当您用钥匙牌靠近开门时车灯不闪,您就知道有人试用了密码,及时更改就行了。 关门离开自动开防盗: 当您离开爱车3—5M 后,智能钥匙牌离开主机RFID 射频识别感应区,车辆会自动锁门,升窗(原车需有该功能),闪灯,并鸣笛一声,如果门未关好,锁不上,爱车会不断报警提示,你就可以采取相应措施了。这让人感觉您下车后什么也不用带,不用管,直接下车关门闪人,真牛!而盗贼却只能望车兴叹了。 一键启动系统:二种启动方式,让您永远不用担心启动损坏,抛锚。 当您钥匙牌身份识别通过,开门上车后,不踩刹车,按一下启动键,即进入ACC1,再按一下启动键,即进入ACC2,再按一下启动键,就关电源了,可循环操作;当您踩下刹车,按下启动键,0.85秒即启动汽车,启动状态下,踩住刹车,按下启动键即会熄火。这让您充分体会到电子科技时代的方便,不用拿着车钥匙扭来扭去,也防止了钥匙因借车,丢失,被复 制带来的防盗风险,或钥匙锁芯损坏,导致要叫人叫车维修的费用开支和时间浪费。如果不踩刹车,按住启动键10秒,汽车会被强制启动。 备用启动键: 当您爱车启动键损坏,失灵,(这种情况在目前还没出现过,可以说还是0故障率),可以踩住刹车,按钥匙牌上的P 键即可0.85秒启动汽车,踩住刹车再按钥匙牌上P 键就会熄火,可循环使用,这样我们就有足够的时间修复启动键不能启动的故障,有效防止汽车抛锚,带来的麻烦。 东莞志远电子科技有限公司王世军
每个Androi d应用启动之后都会出现一个Spl ash启动界面,显示产品的LOGO、公司的LOGO或者开发者信息。如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间。 1.制作Splash界面 突出产品LOGO,产品名称,产品主要特色; 注明产品的版本信息; 注明公司信息或者开发者信息; 背景图片,亦可以用背景颜色代替; 2.处理后台资源 大多数的Splash界面都是会等待一定时间,然后切换到下一个界面; 其实,在这段时间里,可以对系统状况进行检测,比如网络是否通,电源是否充足; 或者,预先加载相关数据; 为了能让启动界面展现时间固定,需要计算执行以上预处理任务所花费的时间,那么:启动界面SLEEP的时间=固定时间-预处理任务时间; 思路有两个,一个是用两个Activity来做,一个用来做启动画面,另一个是主页面;还可以用一个Activity来做,程序启动时显现启动画面,当启动完成后,它会被隐藏来。 方法一:两个Activity,通过线程延迟指定的时间再执行Activity的跳转,我们需要建立两个Activity,一个是SplashActivity,用来做启动画面。另一个是HelloWo rldActivity。在这里只是说明如何来做启动画面,所以就不详细来完成Activity了。 核心代码: package com.demo.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; public class SplashActivity extends Activity { private final int SPLASH_DISPLAY_LENGHT = 6000; // 延迟六秒 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/891353974.html,yout.splash); new Handler().postDelayed(new Runnable() { public void run() { Intent mainIntent = new Intent(SplashActivity.this, HelloWorldActivity.class); SplashActivity.this.startActivity(mainIntent); SplashActivity.this.finish(); } }, SPLASH_DISPLAY_LENGHT); }
移动管家汽车一键启动,手机控车系统、防盗器安装方法 一、安装汽车一键启动,手机控车系统、防盗器技术要求 布线要求:先找好主机固定的位置,线分两路,一路往方向盘底盖,把电源(红色)、ON 线(白色)、控制30A断电器线(黄色)、转向灯线(两条棕色),其余的线往保险盒及左前方、前盖(喇叭线米红色)、车门开关线(蓝色)、中控锁线、仪表台上(LED灯线、天线)2、安装前,先将线全部接上,检查线路正确无误后,再分别把电源、震动器、LED灯插上主机,主机及震动感应器的位置应避免音响喇叭等高磁场的地方。 固定主机、震动感应器的位置注意它们是否有高温产生的电器部位以及还要注意防水(漏水)。 汽车一键启动,手机控车系统、防盗器装的好与不好,反映在查找车线是否正确,接线质量是否过关等。线的查找必须正确,线不能虚接,不该搭铁的地方不能搭铁,搭铁的地方必须搭实。接线处必须紧固、绝缘,否则极易造成烧毁防盗器主机,或车辆电路的严重后果!汽车一键启动认准专业生产供应商-移动管家汽车智控系统,手机控车一键启动,,厂家供应,十年行业经验,价格超低,供货充足,质量可靠,值得信赖.:供应商主营产品:汽车一键启动,汽车智能钥匙,远程一键启动,汽车防盗器...等系列汽车电路结构而专门开发的高安全性、高可靠性、使用方便的高科技汽车智能系统。 二、汽车防盗器配线与寻找判断方法 汽车一键启动,手机控车系统、防盗器配线 1、起动马达线:测电笔一端接地(搭铁),一端找线。钥匙开关开至ON状态,测电笔不亮,起动马达时测电笔会亮,松开马达时测电笔会灭,为起动马达线。 2、ACC线:钥匙开关开至ACC位置时电笔会亮,ON时电笔也亮当起动马达时电笔灯会灭(无电),此线为ACC线。 3、ON线:当钥匙开至ON时,测电笔有电,在起动马达时测电笔也会亮(有电),此线为ON线。 4、+12V线:即电瓶正极线(常火线),在钥匙开关处于OFF时或者处于任何状态时,此线都有正电的为+12V电源线。 转向灯线:钥匙必须开至ON,开左右转向灯时该线分别测试电笔会亮(左右分开找、接)此线为转向灯线。 车门开关控制线(门边线):一般车型为负触发,查找时应将室内灯开关设定到开门控制位置,将司机侧门打开,将其它三个门关好,这时车顶灯会亮着。用电笔一端接地,一端接至门开关线上,这时电笔不亮,当按司机门侧控制开关后,测电笔会亮,而顶灯亮度也会降低不亮。此线即为负触发门边线;另一种测法,将测笔一端接+12V电,另一端测试门灯线说,这时电笔灯不亮,但用手按下司机侧门控制开关,则室内顶灯亮度会降低,测电笔灯也会亮,此门灯线即为正触发的门灯线。美国车系一般正触发,另多数进口车及国产中高级车设有室内灯延时设置,这时应设定主机为室内灯延时型车种,而门边线应接到延时器的 输出端。或者在车门开关控制线接(如奥迪A6、本田:雅阁2.4、奥德赛、丰田佳美2.4、帕沙特等)。 刹车灯线:刹车踏板上有一控制开关出来有二条线,测笔一端接负,另一端测试踩刹车时,开关接通,此时刹车灯会亮,电笔随着也亮,放开刹车踏板后,测 电笔灯会熄灭,则此线为刹车控制线。 中控锁线:一般原车中控与加装PLC整套的中控锁是负触。 负触发判断:测笔一端接负电,另一端测试开关锁的信号时,门中控锁分别会开、关锁,叫
activiti流程开发指南 ?一、BPMN ?二、activiti主要接口 ?三、如何实现一个业务流程 ?四、如何管理所有流程与实例 ?五、开发流程 ?六、api 一、BPMN 1. 什么是BPMN 首先BPMN规范是由标准组织BPMI发布的.BPMN 1.0规范发布于2004年5月。此规范展示了BPMI组织两年多的努力成果。BPMN的主要目标就是要提供被所有业务用户理解的一套标记语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的 BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。 BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。 2. BPMN基础 业务流程图由一系列的图形化元素组成。这些元素简化了模型的开发,且业务分析者看上去非常熟悉。这些元素每个都有各自的特性,且与大多数的建模器类似。比如,活动是矩形,条件是菱形。应该强调的是:开发BPMN的动力就是为了在创建业务流程模型时提供一个简单的机制,同时又能够处理来自业务流程的复杂性。要处理这两个矛盾的需求的方法就是将标记的图形化方面组织分类为特定的类别。这里提供标记类别中的一小部分,以便业务流程图的读者可以简单地识别出元素的基本类型从而理解图形。以下是四种基本的类型: 1)流对象 2)连接对象 3)泳道
4)人工信息 BPMN2.0概要:https://www.doczj.com/doc/891353974.html,/workclass/201206272.asp 二、activiti主要接口 ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService(); ManagementService managementService = processEngine.getManagementService(); IdentityService identityService = processEngine.getIdentityService(); HistoryService historyService = processEngine.getHistoryService(); FormService formService = processEngine.getFormService(); ProcessEngines.getDefaultProcessEngine()会在第一次调用时初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎。使用对应的方法可以创建和关闭所有流程引擎:ProcessEngines.init()和ProcessEngines.destroy()。 ProcessEngines会扫描所有activiti.cfg.xml和activiti-context.xml文件。对于activiti.cfg.xml文件,流程引擎会使用Activiti的经典方式构建: ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream (inputStream).buildProcessEngine(). 对于activiti-context.xml文件,流程引擎会使用Spring方法构建:先创建一个Spring的环境,然后通过环境获得流程引擎。
Android系统架构 Android目录结构 1.src目录 src目录中存放的是该项目的源代码,其内部结构会根据用户所声明的包自动组织,该
目录的组织方式为src/com/jiang/Main.java,程序员在项目开发过程中,大部分时间是对该目录下的源代码文件进行编写。 2.gen目录 该目录的文件是ADT自动生成的,并不需要人为地去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,项目中用户界面、字符串、图片、声音等资源都会在该类中创建其唯一的ID,当项目中使用这些资源时,会通过该类得到资源的引用。 3.Android2.2 该目录中存放的是该项目支持的JAR包,同时还包含项目打包时需要的META-INF目录。 4.assets目录 该目录用于存放项目相关的资源文件,例如文本文件等,在程序中可以使用”getResources.getAssets().open(“text.txt”)”得到资源文件的输入流InputStream对象。 5.res目录 该目录用于存放应用程序中经常使用的资源文件,包括图片、声音、布局文件及参数描述文件等,包括多个目录,其中以drawable开头的三个文件夹用于存储.png、.9.png、.jpg 等图片资源。layout文件夹存放的是应用程序的布局文件。raw用于存放应用程序所用到的声音等资源。value存放的则是所有XML格式的资源描述文件,例如字符串资源的描述文件strings.xml、样式的描述文件style.xml、颜色描述文件colors.xml、尺寸描述文件dimens.xml,以及数组描述文件arrays.xml等。 6.AndroidManifest.xml文件 该文件为应用程序定义了全局的配置信息。这个文件列出了应用程序所提供的功能,包括四大组件、版本、权限等等。在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。 android:versionCode是给设备程序识别版本(升级)。 android:versionName是给用户看的。 7.default.properties文件 该文件为项目的配置文件,不需要认为改动,系统会自动为其进行管理,其中主要描述了该项目的版本等信息。
一,一键启动系统的来源 随着汽车的普及,人们对汽车使用更加频繁,对汽车便利性要求也越来越简单,而FR 无线感应技术的突破加速了,便利性,在宝马奥迪等高配置汽车相继出现一键启动系统,随后开始普及,欧美车日系车国产等都开始了一键启动系统之路!原厂配置一键启动系统车型不断增多,后装改装市场更是越来越大,但是您真正了解吗? 二,原厂一键启动系统典型案例
就从宝马X1为例看上图中控台右边线内下边为智能钥匙上边为一键启动按钮 上图奥迪Q5:中控台上插钥匙,拍档出有一键启动按钮,
上图为沃尔沃XC60一键启动系统:同样钥匙插下边,上边方型一键启动按钮 当然这些都是高档轿车,再看看中端的吧 大众系列一直是很受关注的车型迈腾速腾等式很常见的但是他们同样有个特点看图 上图是迈腾一键启动:中控台右侧钥匙孔位,拍档处一键启动按钮 当然提到一键启动系统不得不说说荣威,她是一个特例
荣威550一键启动系统特殊在于插钥匙直接在钥匙尾巴按 当然了日系车也是重要成员不得不提雅阁就是典型 上图为雅阁8一键启动系统:她的特别在于需要拧 看了这么多我们不妨总结下:不管是公认的安全性能最高的富豪车还是名牌抑或普通车型他们一键启动系统都有机械和电子两个部分,为什么?我们想想钥匙打火就知道,这个设计两套锁方向盘和发动机点火,钥匙是最原始的没的说现在大部分车都有发动机点火芯片在钥匙尾巴里,他们是一对近距离互感应的,没有就打不着火,原厂一键启动系统这么设计也是从这个基础改进的。 三,改装一键启动系统 目前市场改装一键启动系统非常多,产品也是参差不齐,但是我们总结一下可以看看都需要改装原车钥匙和芯片,常用方法配钥匙加回避器等,主动或者被动感应开门直接踩刹车按一键启动按钮启动,显然那两套锁都是摆设破坏了!而没有任何补偿和应对措施,这样显然没有安全性可言,没办法保障安全,这个是产品本身的不足,当然还有一些影藏的东西我们不清楚,比方行车掉电感应不灵打不着火等等问题的屡屡出现让一键启动后装市场迅速陷入僵局,很多商家大肆宣传一键启动系统是相当于加装一道防盗门显然是没有根据的,违背事实的虚假的,我们在这里希望大家能够正确对待改装充分了解产品,不要利欲熏心不要上当受骗!
Android讲解 第一讲 1.Android概述 2.开发环境的搭建 3.创建第一个Android应用程序 4.Android程序的结构分析 1. src 毫无疑问,src 目录是放置我们所有Java 代码的地方,它在这里的含义和普通Java项目下的src 目录是完全一样的,展开之后你将看到我们刚才创建的HelloWorldActivity文件就在里面。 2. gen 这个目录里的内容都是自动生成的,主要有一个R.java 文件,你在项目中添加的任何资源都会在其中生成一个相应的资源id。这个文件永远不要手动去修改它。 3. assets 这个目录用得不多,主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了WebView 加载本地网页的功能,所有
网页相关的文件也都存放在这个目录下。 4. bin 这个目录你也不需要过多关注,它主要包含了一些在编译时自动产生的文件。其中会有一个你当前项目编译好的安装包,展开bin 目录你会看到HelloWorld.apk,把这个文件拷到手机上就可以直接安装了。 5. libs 如果你的项目中使用到了第三方Jar 包,就需要把这些Jar 包都放在libs 目录下,放在这个目录下的Jar 包都会被自动添加到构建路径里去。你可以展开上图中Android 6.0、Android Private Libraries、Android Dependencies 这些库,其中显示的Jar 包都是已经被添加到构建路径里的。 6. res 这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.java 中的内容也是根据这个目录下的文件自动生成的。当然这个目录下还有很多的子目录,图片放在drawable 目录下,布局放在layout 目录下,字符串放在values 目录下,所以你不用担心会把整个res 目录弄得乱糟糟的。 7. AndroidManifest.xml 这是你整个Android 项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本。由于这个文件以后会经常用到,我们用到的时候再做详细说明。 8. project.properties 这个文件非常地简单,就是通过一行代码指定了编译程序时所使用的SDK 版本。我们的HelloWorld 项目使用的是API 14,你也可以在这里改成其他版本试一试。 详解项目中的资源 所有以drawable 开头的文件夹都是用来放图片的,所有以values 开头的文件夹都是用来放字符串的,layout 文件夹是用来放布局文件的,menu 文件夹是用来放菜单文件的。怎么样,是不是突然感觉清晰了很多?之所以有这么多drawable 开头的文件夹,其实主要是为了让程序能够兼容更多的设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的副本,分别放在这些文件夹下,然后当程序运行的时候会自动根据当前运行设备分辨率的高低选择加载哪个文件夹下的图片。当然这只是理想情况,更多的时候美工只会提供给我们一份图片,这时你就把所有图片都放在drawable-hdpi 文件夹下就好了。
Activity中 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 Activity有四种加载模式: ?standard ?singleTop ?singleTask ?singleInstance 设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:
-36-科学技术创新2019.02 汽车一键启动系统工作原理及故障诊断 齐传义 (长城汽车股份有限公司徐水哈弗销售分公司,河北保定071000) 摘要:随着经济水平的快速提高,我国汽车产业得到了前所未有的发展,在汽车零部件和各种系统中电子技术的应用十分普遍,有助于实现对相关结构的电子化操作,同时,提升汽车运行的效率,减少能源消耗,降低空气污染等。目前,汽车中采用一键启动系统十分常见,无钥匙进入、启动系统跟随时代的发展应运而生。一键启动系统在汽车中的应用是新时期智能化技术与汽车制造技术的结合,未来有很大的发展空间,在实际应用中还存在一些亟待解决的问题“本文首先对一键启动系统的概念进行了阐述,对其工作原理进行了分析,对其功能设计进行了必要的探讨,指出了可能存在的故障及诊断方法,进而为汽车一键启动系统的科学应用提供科学的依据。 关键词:汽车启动系统;一键启动;工作原理;故障诊断 中图分类号:U463.6,U472文献标识码:A文章编号:2096-4390(2019)02-0036-02 目前,汽车已经成为我们生活中必不可少的一部分,现阶段人们对于汽车使用的舒适性和便利性提出了更高的要求,因此,很多电子控制技术与智能化技术逐渐应用于汽车中,一键启动系统就是一个典型的系统结构。一键启动系统也可称之为无钥匙进入启动系统,目前是业界十分关注的一部分,一键启动展现了汽车的智能化发展趋势,尤其在国外一些发达国家应用十分广泛,我国国内近些年也开始逐渐重视一键启动技术在汽车工业中的应用,加强其研究有利于提升汽车的智能化水平。 1一键启动系统的概念 一键启动系统或者说无钥匙进入系统主要是指驾驶者持有遥控感应器,在距离车门约0.8m范围内,可以通过给车内控制器发出指令实现智能打开车门,驾驶者进入车内,一个按键就可以启动车辆。一键启动系统由以下几个优点,首先,与传统的汽车钥匙操作相比,车钥匙一般位于驾驶员膝盖上方,驾驶途中突遇紧急刹车,有时会碰触驾驶员膝盖,会导致钥匙和车辆损坏,无钥匙进入系统会避免这些问题。其次,一键启动系统还具有防盗功能,主要通过PKE主机和智能卡之间、发动机ECU和PKE主机之间利用加密算法认证,必须经过认证后才能够启动车辆,如果没有智能卡,就不能启动汽车,不能操作方向盘,这样会避免车辆被盗窃。另外,一键启动系统还可以控制后备箱门,这样可以增加很大的便利。 2汽车一键启动系统工作原理 2.1一键启动系统原理。一键启动系统主要是通过汽车和钥匙之间传递的信号来识别,信号可能是低频或高频的信号,进而识别用户身份,信号传递给车辆中的控制器,出发车门上的感应开关,控制器发送低频信号,验证驾驶员携带的智能钥匙,智能钥匙反馈回来相关信息,进而实现车门自动解锁。 驾驶员进入到汽车内部时,踩下刹车板,按下启动开关,车内控制器发送低频的询问信号,验证智能钥匙。智能钥匙接收到询问信号会反馈一个射频信号,控制器对钥匙进行验证,验证成功后执行启动操作。汽车驾驶员走进汽车信号接收范围内,车主要触动门上的感应开关,车门解锁并解除防盗。驾驶员离开汽车就处于防盗状态,启动感应开关,门锁才会开锁闭锁,这种方式使驾驶员的双手解放出来。 2.2一键启动系统构成。_键启动系统主要由遥控钥匙、无钥匙进入及启动、电子转向锁、防盗线圈、启动开关、天线、感应开关构成,整个系统是较为复杂的系统,主要采用CAN总线与BCM、ECM、仪表,门锁机构及ESCL进行通讯。 2.3系统原理框架图。某车型的PEPS系统采用LIN线通讯。PEPS系统以控制器、智能钥匙和BCM为核心。控制器负责识别驾驶员携带的智能钥匙,要对钥匙进行判断;BCM从LIN线接收来自控制器的指令,完成锁门和锁天窗的的操作。控制器与BCM可以控制电子转向锁,PEPS控制ESCL的供电时机,执行ESCL解闭锁操作和需要对ES-CL进行诊断,控制器才对ESCL供电,其他时间则不供电。ON档时不给ESCL上电,通过LIN总线和ESCL通信,完成解闭锁动作。PEPS控制器集成了电源分配电路,I.F天线驱动电路.IMM0认证电路,RF接收电路,LIN总线电路及其他输入输出的电路。 3一键启动系统功能设计 3.1电子转向锁功能。电子转向锁主要由执行器与控制器两部分构成,控制器可以创建执行器和系统的智能连接,可以输入信号进而判断智能钥匙,进而控制解闭锁。 3.2防盗功能。PCU可以识别智能卡无线信号,进而鉴定智能卡通信的科学性,定时发送智能卡检测信号,如果检测到智能卡通信信号,进行通讯,智能卡和PCU之间具有随机加密性,通讯数据是唯一的,其中任何一部分失败,通讯就会中断,车锁关闭,发动机不允许启动,进而实现防盗的目的。 3.3一键启动功能。驾驶员进入到汽车中,当踩踏制动踏板,无论汽车处于N档还是P档,驾驶员只要按下启动按钮,车辆就可以实现正常的启动。汽车停止运行时,驾驶员按启动按钮关闭发动机,如果在行驶中遇到突发事件,要过程中遇到突发状况,驾驶员要长按1 s启动按钮,将发动机关闭,如果发动机出现异常,汽车会自动停止起动机。 3.4点火开关控制功能。点火开关控制主要指的是在汽车车门闭锁后,ACC电源被断开,电子方向盘锁定,点火开关处于OFF档,车门打开后,接通ACC电源,按下启动按钮,可以将电子转向锁打开,点火开关处于ON档。 3.5无钥匙遥控功能。可以利用无钥匙智能技术实现自动解锁,智能钥匙位于低频工作范围时,驾驶员携带的智能卡可以识别PCU发出的信号,识别并验证用户智能卡的身份是否合法,实现车门解锁。还有一个智能操作功能就是实现自动闭锁,发动机停止后,自动关闭车门,车门没有关闭好,方向灯会闪烁。驾驶员可以利用遥控器实现照明遥控,控制车顶灯、自动开锁、自动上锁功能、寻车功能等。 4一键启动故障诊断 在一键启动系统中一旦任何一根线路出现问题.无(转下页)
A n d r o i d应用程序绑定服务b i n d S e r v i c e 的过程源代码分析
Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部启动;前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部绑定Service的过程,这是一种在应用程序进程内部启动Service的方法。 在前面一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划中,我们就曾经提到,在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service运行在独立的进程中,而Activity有可能运行在同一个进程中,也有可能运行在不同的进程中;在接下来的文章中,Android系统在新进程中启动自定义服务过程(startService)的原理分析一文介绍了在新的进程中启动Service的过程,Android应用程序启动过程源代码分析一文介绍了在新的进程中启动Activity的过程,而Android应用程序内部启动Activity过程(startActivity)的源代码分析一文则介绍了在应用程序进程内部启动Activity的过程;本文接过最后一棒,继续介绍在应用程序进程内部启动Service的过程,这种过程又可以称在应用程序进程内部绑定服务(bindService)的过程,这样,读者应该就可以对Android应用程序启动Activity和Service有一个充分的认识了。 这里仍然是按照老规矩,通过具体的例子来分析Android应用程序绑定Service的过程,而所使用的例子便是前面我们在介绍Android系统广播机制的一篇文章Android系统中的广播(Broadcast)机制简要介绍和学习计划中所开发的应用程序Broadcast了。 我们先简单回顾一下这个应用程序实例绑定Service的过程。在这个应用程序的MainActivity的onCreate函数中,会调用bindService来绑定一个计数器服务CounterService,这里绑定的意思其实就是在MainActivity内部获得CounterService的接口,所以,这个过程的第一步就是要把CounterService 启动起来。当CounterService的onCreate函数被调用起来了,就说明CounterService已经启动起来了,接下来系统还要调用CounterService的onBind函数,跟CounterService要一个Binder对象,这个Binder对象是在CounterService内部自定义的CounterBinder类的一个实例,它继承于Binder类,里面实现一个getService函数,用来返回外部的CounterService接口。系统得到这个Binder对象之后,就会调用MainActivity在bindService函数里面传过来的ServiceConnection实例的onServiceConnected函数,并把这个Binder对象以参数的形式传到onServiceConnected函数里面,于是,MainActivity就可以调用这个Binder对象的getService函数来获得CounterService的接口了。 这个过程比较复杂,但总体来说,思路还是比较清晰的,整个调用过程为MainActivity.bindService->CounterService.onCreate->CounterService.onBind- >MainActivity.ServiceConnection.onServiceConnection->CounterService.CounterBinder.getService。下面,我们就先用一个序列图来总体描述这个服务绑定的过程,然后就具体分析每一个步骤。
Activity四种启动模式 一、启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Android Manifest.xml中的标签的android:launchMode属性设置; 启动模式有4种,分别为standard、singleTop、singleTask、singleInstance; 讲解启动模式之前,有必要先讲解一下“任务栈”的概念; 任务栈 每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1-->Activity2-->Activity3,则任务栈为: 二、启动模式 (1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
(2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例; (3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;
(4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;
SingTask的应用: 可以用来退出整个应用。 将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。 附: 退出单个Activity方法: 调用finish 杀死该进程:killprocess(Process.mId) 终止正在运行的虚拟机:system.exit() 退出整个应用: 制造抛异常导致整个程序退出 将所有的activity放入到一个list中,然后在需要退出的时候,将所有的activity,finish掉 通过广播来完成退出功能 通过广播来完成退出功能,具体实现过程是这样的:在每个Activity创建时(onCreate时)给Activity注册一个广播接收器,当退出时发送该广播即可。大概的代码如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(); filter.addAction("finish");