安卓代码解释
在安卓手机上拨号键输入##.....##进行手机测试,都有哪些代码,可以进行哪些操作
*#*#0283#*#*–Packet Loopback *#*#0*#*#*–LCD测试
*#*#0673#*#*或*#*#0289#*#*–Melody测试 *#*#0842#*#*–装置测试,例如振动、亮度 *#*#2663#*#*–触控屏幕版本 *#*#2664#*#*–触控屏幕测试 *#*#0588#*#*–接近感应器测试 *#*#3264#*#*–内存版本
*#*#197328640#*#*启动服务模式,可以测试手机部分设置及更改设定 WLAN、GPS及蓝牙测试的代码
*#*#232339#*#*或*#*#526#*#*或*#*#528#*#*–WLAN测试 *#*#232338#*#*–显示WiFiMAC地址 *#*#1472365#*#*–GPS测试 *#*#1575#*#*–其它GPS测试 *#*#232331#*#*–蓝牙测试
*#06#显示手机原厂出厂串号(移动通信国际识别码)
*#*#4636#*#*显示手机信息、电池信息、电池历史记录、使用情况统计、Wifi information
*#*#7780#*#*重设为原厂设定,不会删除预设程序,及SD卡档案
*2767*3855#重设为原厂设定,会删除SD卡所有档案
*#*#34971539#*#*显示相机韧体版关机按钮时,会出现一个切换手机模式的窗口,包括: 静音模式、飞航模式及关机,你可以用以上代码,直接变成关机按钮
*#*#273283*255*663282*#*#*开启一个能让你备份媒体文件的地方,例如相片、声音及影片等
*#*#232337#*#*–显示蓝牙装置地址 *#*#8255#*#*启动GTalk服务监视器 显示手机软件版本的代码
安卓系统代码查询大全
安卓系统代码查询大全不保证所有指令都能在Android(安卓)系统所有版本上有效*#06# 显示手机原厂出厂串号(移动通信国际识别码)*#*#4636#*#* 显示手机信息、电池信息、电池历史记录、使用情况统计、Wifi information*#*#7780#*#* 重设为原厂设定,不会删除预设程序,及SD卡档案*2767*3855# 重设为原厂设定,会删除SD卡所有档案*#*#34971539#*#* 显示相机韧体版本,或更新相机韧体*#*#7594#*#* 当长按关机按钮时,会出现一个切换手机模式的窗口,包括: 静音模式、飞航模式及关机,你可以用以上代码,直接变成关机按钮*#*#273283*255*663282*#*#* 开启一个能让你备份媒体文件的地方,例如相片、声音及影片等*#*#197328640#*#* 启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS及蓝牙测试的代码*#*#232339#*#*或*#*#526#*#*或*#*#528#*#* WLAN测试*#*#232338#*#* 显示WiFiMAC地址*#*#1472365#*#* GPS测试*#*#1575#*#* 其它GPS测试*#*#232331#*#* 蓝牙测试*#*#232337#*#* 显示蓝牙装置地址*#*#8255#*#* 启动GTalk服务监视器显示手机软件版本的代码*#*#4986*2650468#*#* PDA、Phone、H/W、RFCallDate*#*#1234#*#* PDA及Phone*#*#1111#*#* FTASW版本*#*#2222#*#* FTAHW版本*#*#44336#*#* PDA、Phone、CSC、Build Time、Changelist number 各项硬件测试*#*#0283#*#* Packet Loopback*#*#0*#*#* LCD测试*#*#0673#*#*或*#*#0289#*#* Melody测试*#*#0842#*#* 装置测试,例如振动、亮度*#*#2663#*#* 触控屏幕版本*#*#2664#*#* 触控屏幕测试*#*#0588#*#* 接近感应器测试*#*#3264#*#* 内存版本。
安卓系统指令代码大全
*#*#232337#*#*–显示蓝牙装置地址
*#*#8255#*#*启动GTalk服务监视器
显示手机软件版本的代码
*#*#4986*2650468#*#*–PDA、Phone、H/W、RFCallDate
*#*#1234#*#*–PDA及Phone
*#*#1111#*#*–FTASW版本
安卓系统指令代码大全
转自互联网
不保证所有指令都能在Android(安卓)系统所有版本上有效
*#06#显示手机原厂出厂串号(移动通信国际识别码)
*#*#4636#*#*显示手机信息、电池信息、电池历史记录、使用情况统计、Wifiinformation
*#*#7780#*#*重设为原厂设定,不会删除预设程序,及SD卡档案
*#*#2222#*#*–FTAHW版本
*#*#44336#*#*–PDA、Phone、CSC、Build Time、Changelistnumber
各项硬件测试
*#*#0283#*#*–PacketLoopback
*#*#0*#*#*–LCD测试
*#*#0673#*#*或*#*#0289#*#*–Melody测试
*#*#0842#*#*–装置测试,例如振动、亮度
*#*#2663#*#*–触控屏幕版本
*#*#2664#*#*–触控屏幕测试
*#*#0588#*#*–接近感应器测试
*#*#3264#*#*–内存版本
*2767*3855#重设为原厂设定,会删除SD卡所有档案
*#*#34971539#*#*显示相机韧体版本,或更新相机韧体
*#*#7594#*#*当长按关机按钮时,会出现一个切换手机模式的窗口,包括: 静音模式、飞航模式及关机,你可以用以上代码,直接变成关机按钮
安卓手机命令代码
*#*#4636#*#*代码详解:WCDMA preferred:意为WCDMA首选,GSM电话2G、3G数据通信都能使用;但是会主动去检查3G信号强度,切换到3G的阀值比较低(即容易切换到3G网络)。
GSM only:GSM电话只能用2G数据通信,2G信号强度过低,就收不到任何信号,玩完了。
WCDMA only:GSM电话只能用3G数据通信,3G信号强度过低,就没得玩了。
GSM auto (PRL):GSM电话2G、3G数据通信都能使用;信号强度低时,2G网络受到优待选择。
但疑虑是:PRL主要是跟CDMA技术有联系,与GSM技术则无关。
此选项切换到3G网络的阀值较高,比WCDMA preferred 节电。
CDMA auto (PRL):CDMA电话2G、3G数据通信都能使用;信号强度低时,2G网络受到优待选择。
CDMA only:CDMA电话只能用2G数据通信,2G信号强度过低,就没得玩了。
EvDo only:CDMA电话只能用3G数据通信,3G信号强度过低,就没得玩了。
GSM/CDMA auto (PRL):GSM和CDMA双模电话使用会比较好。
我用的是普通移动卡(2G非3G)选的GSM only*#*#4636#*#*显示手机信息、电池信息、电池记录、使用统计数据、WIFI信息*#*#7780#*#*重设为原厂设定,不会删除预设程序及SD卡档案*2667*3855#重设为原厂设定,会删除SD卡所有档案*#*#34971539#*#*显示相机相机韧体版本,或更新相机韧体*#*#7594#*#*当长按关机按钮时,会出现一个切换手机模式的窗口,可以用这个代码,直接变成关机按钮*#*#273283*255*663282*#*#*开启一个能让你备份媒体文件的地方,例如相片、声音等*#*#197328640#*#*启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS 及蓝牙测试代码*#*#232338#*#*显示WIFI MAC地址*#*#1472365#*#* GPS测试*#*#1575#*#*其他GPS测试*#*#232331#*#蓝牙测试*#*#232337#*#显示蓝牙装置地址*#*#8255#*#*启动GTALK服务监视器各项硬件测试*#*#0283#*#* Packet Loopback*#*#0*#*#* LCD测试*#*#0842#*#*装置测试,如震动、亮度*#*#2663#*#*触控屏幕版本*#*#2664#*#*触控屏幕测试*#*#0588#*#*接近感应器测试*#*#3264#*#*内存版本*#06#显示手机原厂出厂串号(移动通信国际识别码)显示手机软件版本的代码*#*#1234#*#* PDA及PHONE*#*#1111#*#* FTA SW版本*#*#2222#*#* FTA HW版本。
安卓手机测试代码
本帖隐藏的内容1.显示手机信息、电池信息、电池记录、使用统计数据、WiFi信息:*#*#7780#*#*2.重设为原厂设定,不会删除预设程序,及SD卡档案:*2767*3855#3.重设为原厂设定,会删除SD卡所有档案:*#*#34971539#*#*4.显示相机相机韧体版本,或更新相机韧体:*#*#7594#*#*65.当长按关机按钮时,会出现一个切换手机模式的窗口,包括:静音模式、飞航模式及关机,你可以用以下代码,直接变成关机按钮:*#*#273283*255*663282*#*#*6.开启一个能让你备份媒体文件的地方,例如相片、声音及影片等:*#*#197328640#*#*7.启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS及蓝牙测试的代码:*#*#232339#*#*或*#*#526#*#*或*#*#528#*#* –WLAN测试*#*#232338#*#* –显示WiFiMAC地址*#*#1472365#*#* –GPS测试*#*#1575#*#* –其它GPS测试*#*#232331#*#* –蓝牙测试*#*#232337#*# –显示蓝牙装置地址*#*#8255#*#* 启动GTalk服务***器显示手机软件版本的代码*#*#4986*2650468#*#* –PDA、Phone、H/W、RFCallDate*#*#1234#*#* –PDA及Phone*#*#1111#*#* –FTASW版本*#*#2222#*#* –FTAHW版本*#*#44336#*#* –PDA、Phone、csc、buildTime、、changelistnumber各项硬件测试*#*#0283#*#* –PacketLoopback*#*#0*#*#* –LCD测试*#*#0673#*#* 或*#*#0289#*#* –Melody测试*#*#0842#*#* –装置测试,例如振动、亮度*#*#2663#*#* –触控屏幕版本*#*#2664#*#* –触控屏幕测试*#*#0588#*#* –接近感应器测试*#*#3264#*#* –内存版本。
安卓系统中的恶意代码检测
安卓系统中的恶意代码检测随着智能手机的普及,移动应用程序(App)已成为人们日常生活的重要组成部分。
但是,一些不法分子利用App向用户发送恶意代码(恶意软件),对用户造成不良影响。
因此,安卓系统中的恶意代码检测越来越受到重视。
一、安卓系统中的恶意代码种类恶意代码,即恶意软件,是指一些恶意程序,针对特定的系统或应用程序,采用特定的攻击技术,从而窃取或破坏用户计算机系统或移动设备。
安卓系统中的恶意代码种类主要包括以下几种:1. 病毒:一种本身不能独立运行的程序,通常需要寄生在其他应用程序或文件中,才能进行破坏。
2. 木马:以正常程序包的形式偷偷地安装在用户设备上,并在用户不知情的情况下执行相应的操作,如窃取用户的密码、拦截用户的信息等。
3. 间谍软件:通过特殊的技术手段,能够在未经用户允许的情况下获取用户的隐私信息。
4. 蠕虫:一种可以自我复制的程序,通常会利用系统漏洞或者网络传播来感染更多的设备。
二、安卓系统中恶意代码检测的重要性随着人们对移动设备的依赖越来越高,恶意代码不断地升级和扩散。
如果没有恶意代码检测技术的支持,那么用户就很难发现已经被感染了恶意代码,很可能会造成不良影响,例如窃取用户的信息、充值等。
因此,安卓系统中的恶意代码检测越来越成为了重要的问题。
恶意代码检测的目标是识别利用安卓系统漏洞和木马、病毒等侵入用户设备并获取用户隐私信息等行为的代码。
一旦识别出恶意代码,可以通过升级系统、卸载App等方式加以处理,以避免用户信息的泄露和数据的丢失。
三、安卓系统中恶意代码检测的方法安卓系统中恶意代码检测主要通过以下几种方法:1. 黑白名单过滤:通过收集和清洗恶意代码的样本信息,并建立恶意代码的黑名单和白名单,从而对用户下载的应用程序进行筛选。
黑名单包含已知的恶意代码,白名单则包含用户正常使用的应用程序。
可以令安卓设备只允许在白名单中的程序运行,避免通过网址或第三方应用下载恶意程序。
2. 基于特征的检测:根据恶意代码的特征,检测恶意代码。
安卓手机操作代码、设置安卓手机铃声文件夹
* 2767 * 3855#(工厂硬复位的ROM固件默认设置)
固件工具
*#2663#(重钙/邓肇坚固件更新)
*#34971539#(相机固件更新)
*#7412365#(相机固件菜单)
或*#*#34971539#*#*
*#03#(NAND快闪记忆体的S / N)的
2.打开“audio”文件夹后,在里面分别建立“ringtones”(来电)、“notifications”(短信)、“alarms”(闹钟)、“ui”(系统提示)。
3.然后按照自己的需要将铃声存放到这几个文件夹中。然后重启手机!
4.打开android手机,在“菜单”-“设置”-“声音”这里就可以自行进行选择了。
【重要提示:当把文件夹建好后,把要设置的铃声放进指定文件夹后,重启手机,然后在去设置里面找你放进的铃声就可以了!】
(短信铃声设置方法→进入短信里→按菜单键→进入设置里→就可以设置短信铃声了)
* 7465625 * 27 *#(插入网络锁定密钥号码新型干法/处长)
#7465625 * 27 *#(插入内容提供商密码)
我在网上找的,有用
一般android手机具有四种铃声可以设置,分别为:来电、短信、闹钟、系统等种类铃声,具体的设置方法为:
1.首先打开android手机的SD卡,在卡根目录建立个“media”文件夹,然后打开后建立个“audio”文件夹。
*#746#(调试转储菜单)
*#9900#(系统转储模式)
*#273283 * 255 * 3282 *#(数据创建菜单)
*#273283 * 255 * 663282 *#(数据创建SD卡)
安卓系统软件代码
安卓手机到手以后,把不需要的程序删掉,没有root过的机器是没有办法删系统自带的程序的。
什么是root呢?其实root就好比是windows里面administrator的意思,也就是最高权限账户,root就是Android系统的最高权限账户,做了root操作以后就可以随心所欲的去系统内删除程序等工作了。
首先就是下载这个软件!(软件到网上可以下载到,“一键rootZ4root”软件,如果找不到,可以联系我,我发给你)下载并安装即可在手机里找到,打开软件后,选择第二个选择项目,再点OK,然后将手机的“USB调试”打开,(这个很重要,必须打开,如果找不到,也可以找我!因为机型不同,所以有出入!)然后再重新启动Z4程序,继续选择第二个选项,手机即将进行关机、重启,重启后,界面里面则可以看见一个骷髅图标(“权限管理”),点击,然后点击Z4程序,在跳出的白色选项中再点“允许”,即完成了所谓的root工作。
接下去用 R.E.管理器(网上有“R.E管理器”这个下载,没有也可以找我,我发你。
安装之后,点开,在选择“允许”,则也获得了管理最高权限)进入R.E程序,可看到左上角有什么读写之类的,点击一下旁边的白色框,改变模式即可!然后依次打开手机根目录的system/app/ 这里面看到的就是内置的软件程序,你就可以按照自己的需求去删除了,以下有个对应列表,供参考,注意的是,同一个软件有*.apk和*.ODEX 这2个都需要删除的。
等删除完以后,马上重启手机,然后再去手机的设置-应用程序-管理应用程序再清理下刚刚删除的程序!以下是app文件夹内文件的对应中文意思!供大家参考。
AlarmClock.apk 闹钟AudioEffect.apk 音频效果Browser.apk 浏览器Calculator.apk 计算器Calendar.apk 日历Calendarprovider.apk 日历数据存储Camera.apk 相机CoolDict.apk 词酷DiceBox.apk 酒吧骰子Email.apk 电子邮件FileManager.apk 文件管理器Firewall.apk 防火墙FMRadio.apk FM收音机FOTA.apk 系统更新(反正ROOT后也不能更新,不如删了)GlobalSearch.apk 搜索(删除后设置中的搜索项将无法进入,但不影响使用)GooglePinyinIme.apk 谷歌拼音HTMLViewer.apk HTML浏览器MagicSmokeWallpapers.apk 动态壁纸Mob.apk 手机营业厅MotoApnControlWidget.apk 手机上网控制MotoAppStore.apk 智件园MotoCal.apk 公司日历MotoGal.apk 公司名录Music.apk 音乐NaviTo.apk 途语导航NotesWidget.apk 记事帖插件PandaReader.apk 熊猫看书PimBackup.apk SD卡备份QuickOffice.apkSimManager.apk SIM管理器SlideShowWidget.apk 幻灯片插件SoundRecorder.apk 录音机Stk.apk SIM卡应用TightropeHero.apk 钢丝英雄TongHuaShun.apk 同花顺UCBrowser.apk UC浏览器VisualizationWallpapers.apk 动态壁纸WeatherWidget.apk 天气插件Wo.apk 沃3GWorldClockWidget.apk 世界时钟YouKu.apk 手机优酷注意以下程序不要轻易删除:Latin.apk和LatinIME.apk是英文输入法,删除后MOTO输入法不能切换到虚拟键盘LiveWallpapers.apk和LiveWallpapersPicker.apk若是删除则动态壁纸不能使用,当然不用动态壁纸尽可以一删了之MediaProvider.apk若是删除则手机会找不到所有的铃声,变成静音Pinyin.apk和Switcher.apk是MOTO输入法程序UserDictionaryProvider.apk删除后在虚拟键盘下用MOTO输入法输入英文会出错如有不懂,可以联系我!我的QQ:196167289。
安卓应用开发常用代码
安卓应⽤开发常⽤代码1,获取当天⽇期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String updatedate = sdf.format(new java.util.Date());2,String转IntInteger.valueOf(str).intValue()3,Int转StringString.valueOf(selectedtaskid)4,Toast显⽰Toast.makeText(ListComplicateTaskActivity.this, "你已经有100条记录,请先删除⼀些", Toast.LENGTH_LONG).show(); 5,不带参数跳转activitystartActivity(new Intent(ListComplicateTaskActivity.this,ListComplicateTaskActivity.class));6,带参数跳转activityA:Intent it = new Intent();it.putExtra("selectpos", 65535);it.setClass(ListComplicateTaskActivity.this,AddTaskActivity.class);startActivity(it);B:Intent intent = this.getIntent();// 得到⽤于激活它的意图position = intent.getIntExtra("selectpos", 0);7,SQLite数据库操作//查询Cursor c = db.rawQuery("select * from task where taskid = ?",new String[] { position + "" });//插⼊sql = "insert into task(taskid,content,priority,istop,isdeadline,deadline, updatedate) values ("+ taskno+ ", '"+ stredit+ "', "+ radioidx+ ", '"+ isontop+ "', '"+ isdealine+ "', '"+ time + "', '" + updatedate + "')";db.execSQL(sql);//更新sql = "update task set istop = 'true' where taskid = "+ selectedtaskid + "";db.execSQL(sql);// 执⾏修改//删除db.delete( "task","taskid = ?", new String[] { String.valueOf(selectedtaskid) });。
安卓手机的常用各类代码
安卓通用代码(拨号):*#*#4636#*#*查看手机必备(这个我经常用)*#12580*369# 显示PDA,Phone,H/W,第一次打电话,内存,CSC信息.*#*#4986*2650468#*#* PDA、Phone、H/W、RFCallDate*#*#1234#*#* 显示PDA 及Phone等固件信息(有反应)*#*#1111#*#* FTA SW 版本*#*#2222#*#* FTA HW 版本*#*#44336#*#* PDA 、Phone、CSC、Build Time、Changelist number *#06# 显示IMEI号.各项硬件测试*#*#0283#*#* Audio Loopback Control*#*#0*#*#* LCD 测试*#*#0673#*#* 或*#*#0289#*#* Melody 测试*#*#0842#*#* 装置测试,例如振动、亮度*#*#2663#*#* 触控屏幕版本*#*#2664#*#* 触控屏幕测试*#*#0588#*#* 接近感应器测试*#0589# 背光灯感应器测试.*#*#3264#*#* 内存版本*#0782# 实时时钟测试.*#0673# 声音测试模式.*#0*# 通用测试,有好多项测试.*#0228# ADC Reading 其中有网络信息,其它的我也不知道是什么.*#32489# 加密信息.*#2263# 射频频段选择,如:gsm1800mhz,wcdma2100mhz等,我在galaxy tab上试好象没作用,这个可能还要硬件支持的.*#9090# Diagnostic ConfiguratioN*#7284# USB UART I2C Mode Control*#872564# USB Logging Control*#4238378# GCF Configuration*#1575# GPS控制菜单*#3214789650# LBS Test Mode*#745# RIL Dump Menu*#746# Debug Dump Menu.*#9900# 系统转存模式.*#44336# PDA 、Phone、CSC、Build Time、Changelist number各项硬件测试*#2663# TSP / TSK firmware update.*#03# NAND Flash S/N.*#273283*255*3282*# 数据创建菜单.*#273283*255*663282*# 开启一个能让你备份媒体文件的地方,例如相片、声音及影片等*#3282*727336*# Data Usage Status.*#526#或*#528# WLAN工程模式.*#80# Unknown.*#07# 测试历史记录.*#3214789# GCF Mode Status.*#272886# Auto Answer Selection.*#8736364# OTA Update Menu.*#301279# HSDPA/HSUPA 控制菜单.*#7353# Quick Test Menu.*2767*4387264636# Sellout SMS / PCODE view.*#7465625# View Phone Lock Status.*7465625*638*# Configure Network Lock MCC/MNC.#7465625*638*# Insert Network Lock Keycode.*7465625*782*# Configure Network Lock NSP.#7465625*782*# Insert Partitial Network Lock Keycode.*7465625*77*# Insert Network Lock Keycode SP.#7465625*77*# Insert Operator Lock Keycode.*7465625*27*# Insert Network Lock Keycode NSP/CP.#7465625*27*# Insert Content Provider Keycode.*#*#4636#*#*显示手机信息、电池信息、电池记录、使用统计数据、WiFi 信息*#*#7780#*#* 或*#7780# 重设为原厂设定,不会删除预设程序,及SD 卡档案。
安卓简单注册登录的基本代码
LayoutInflater fc=LayoutInflater.from(Login.this);
final View DialogView=fc.inflate(yout.dialog,null);
import android.widget.EditText;
import android.widget.TextView;
public class ZhuceActivity extends Activity {
/** Called when the activity is first created. */
登录代码:
package zhuce.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
startActivity(intent);
Login.this.finish();
}
}).create();
dialog1.show();
}
else
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
安卓代码
package com.lzy.demo.okrx;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.lzy.demo.R;import com.lzy.demo.base.BaseRxDetailActivity;import com.lzy.demo.ui.NumberProgressBar;import com.lzy.demo.utils.GlideImageLoader;import com.lzy.demo.utils.Urls;import com.lzy.imagepicker.ImagePicker;import com.lzy.imagepicker.bean.ImageItem;import com.lzy.imagepicker.ui.ImageGridActivity;import com.lzy.okgo.OkGo;import com.lzy.okgo.convert.StringConvert;import com.lzy.okrx.RxAdapter;import java.io.File;import java.util.ArrayList;import butterknife.Bind;import butterknife.ButterKnife;import butterknife.OnClick;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action0;import rx.functions.Action1;public class RxFormUploadActivity extends BaseRxDetailActivity { @Bind(R.id.formUpload) Button btnFormUpload;@Bind(R.id.downloadSize) TextView tvDownloadSize;@Bind(Progress) TextView tvProgress;@Bind(Speed) TextView tvNetSpeed;@Bind(R.id.pbProgress) NumberProgressBar pbProgress;@Bind(R.id.images) TextView tvImages; private ArrayList<ImageItem> imageItems; @Overrideprotected void onActivityCreate(Bundle savedInstanceState) {setContentView(yout.activity_form_upload);ButterKnife.bind(this);setTitle("文件上传");} @Overrideprotected void onDestroy() {super.onDestroy();//Activity销毁时,取消网络请求unSubscribe();} @OnClick(R.id.selectImage)public void selectImage(View view) {ImagePicker imagePicker = ImagePicker.getInstance();imagePicker.setImageLoader(new GlideImageLoader());imagePicker.setMultiMode(true); //多选imagePicker.setShowCamera(true); //显示拍照按钮imagePicker.setSelectLimit(9); //最多选择9张imagePicker.setCrop(false); //不进行裁剪Intent intent = new Intent(this, ImageGridActivity.class);startActivityForResult(intent, 100);} @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {if (data != null && requestCode == 100) {imageItems = (ArrayList<ImageItem>)data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);if (imageItems != null && imageItems.size() > 0) {StringBuilder sb = new StringBuilder();for (int i = 0; i < imageItems.size(); i++) {if (i == imageItems.size() - 1) sb.append("图片").append(i + 1).append(" :").append(imageItems.get(i).path);else sb.append("图片").append(i + 1).append(" :").append(imageItems.get(i).path).append("\n");}tvImages.setText(sb.toString());} else {tvImages.setText("--");}} else {Toast.makeText(this, "没有选择图片",Toast.LENGTH_SHORT).show();tvImages.setText("--");}}} @OnClick(R.id.formUpload)public void formUpload(View view) {ArrayList<File> files = new ArrayList<>();if (imageItems != null && imageItems.size() > 0) {for (int i = 0; i < imageItems.size(); i++) {files.add(new File(imageItems.get(i).path));}}.observeOn(AndroidSchedulers.mainThread())//切换到主线程.subscribe(new Action1<String>() {@Overridepublic void call(String s) {btnFormUpload.setText("上传完成");handleResponse(s, null, null);}}, new Action1<Throwable>() {@Overridepublic void call(Throwable throwable) {throwable.printStackTrace();btnFormUpload.setText("上传出错");showToast("请求失败");handleError(null, null);}});}}package com.lzy.demo.okrx;import android.graphics.Bitmap;importcom.lzy.demo.callback.JsonConvert;import com.lzy.demo.model.LzyResponse;import com.lzy.demo.model.ServerModel;import com.lzy.demo.utils.Urls;import com.lzy.okgo.OkGo;import com.lzy.okgo.convert.BitmapConvert;import com.lzy.okgo.convert.FileConvert;import com.lzy.okgo.convert.StringConvert;import com.lzy.okrx.RxAdapter;import java.io.File;import java.util.List;import rx.Observable;public class ServerApi { public static Observable<String> getString(String header, String param) {return OkGo.post(Urls.URL_METHOD)//.headers("aaa", header)//.params("bbb", param)//.getCall(StringConvert.create(), RxAdapter.<String>create());} public static Observable<LzyResponse<ServerModel>> getServerModel(String header, String param) {return OkGo.post(Urls.URL_JSONOBJECT)//.headers("aaa", header)//.params("bbb", param)//.getCall(new JsonConvert<LzyResponse<ServerModel>>() {}, RxAdapter.<LzyResponse<ServerModel>>create());} public static Observable<LzyResponse<List<ServerModel>>> getServerListModel(String header, String param) {return OkGo.post(Urls.URL_JSONARRAY)//.headers("aaa", header)//.params("bbb", param)//.getCall(new JsonConvert<LzyResponse<List<ServerModel>>>() {}, RxAdapter.<LzyResponse<List<ServerModel>>>create());} public static Observable<Bitmap> getBitmap(String header, String param) { return OkGo.post(Urls.URL_IMAGE)//.headers("aaa", header)//.params("bbb", param)//.getCall(BitmapConvert.create(), RxAdapter.<Bitmap>create());} public static Observable<File> getFile(String header, String param) { return OkGo.post(Urls.URL_DOWNLOAD)//.headers("aaa", header)//.params("bbb", param)//.getCall(new FileConvert(), RxAdapter.<File>create());}}package com.lzy.demo.okserver;import android.os.Bundle;import android.support.v7.widget.Toolbar;import android.text.format.Formatter;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import com.bumptech.glide.Glide;import com.lzy.okgo.OkGo;import com.lzy.demo.R;import com.lzy.demo.base.BaseActivity;import com.lzy.demo.model.ApkModel;import com.lzy.demo.utils.ApkUtils;import com.lzy.okserver.download.DownloadInfo;import com.lzy.okserver.download.DownloadManager;import com.lzy.okserver.download.DownloadService;import com.lzy.okserver.listener.DownloadListener;import com.lzy.okgo.request.GetRequest;import java.io.File;import butterknife.Bind;public class DesActivity extends BaseActivity implements View.OnClickListener { @Bind(R.id.toolbar) Toolbar toolbar;@Bind(R.id.icon) ImageView icon;@Bind() TextView name;@Bind(R.id.downloadSize) TextView downloadSize;@Bind(Progress) TextView tvProgress;@Bind(Speed) TextView netSpeed;@Bind(R.id.pbProgress) ProgressBar pbProgress;@Bind(R.id.start) Button download;@Bind(R.id.remove) Button remove;@Bind(R.id.restart) Button restart; private MyListener listener;private DownloadInfo downloadInfo;private ApkModel apk;private DownloadManager downloadManager; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_download_details);initToolBar(toolbar, true, "下载管理"); apk = (ApkModel) getIntent().getSerializableExtra("apk");downloadManager = DownloadService.getDownloadManager(); Glide.with(this).load(apk.getIconUrl()).error(R.mipmap.ic_launcher).into(icon);name.setText(apk.getName());download.setOnClickListener(this);remove.setOnClickListener(this);restart.setOnClickListener(this);listener = new MyListener(); downloadInfo = downloadManager.getDownloadInfo(apk.getUrl());if (downloadInfo != null) {//如果任务存在,把任务的监听换成当前页面需要的监听downloadInfo.setListener(listener);//需要第一次手动刷一次,因为任务可能处于下载完成,暂停,等待状态,此时是不会回调进度方法的refreshUi(downloadInfo);}} @Overrideprotected void onResume() {super.onResume();if (downloadInfo != null) refreshUi(downloadInfo);} @Overrideprotected void onDestroy() {super.onDestroy();if (downloadInfo != null) downloadInfo.removeListener();} @Overridepublic void onClick(View v) {//每次点击的时候,需要更新当前对象downloadInfo = downloadManager.getDownloadInfo(apk.getUrl());if (v.getId() == download.getId()) {if (downloadInfo == null) {GetRequest request = OkGo.get(apk.getUrl())//.headers("headerKey1", "headerValue1")//.headers("headerKey2", "headerValue2")//.params("paramKey1", "paramValue1")//.params("paramKey2", "paramValue2");downloadManager.addTask(apk.getUrl(), request, listener);return;}switch (downloadInfo.getState()) {case DownloadManager.PAUSE:case DownloadManager.NONE:case DownloadManager.ERROR:downloadManager.addTask(downloadInfo.getUrl(), downloadInfo.getRequest(), listener);break;case DownloadManager.DOWNLOADING:downloadManager.pauseTask(downloadInfo.getUrl());break;case DownloadManager.FINISH:if (ApkUtils.isAvailable(this, newFile(downloadInfo.getTargetPath()))) {ApkUtils.uninstall(this, ApkUtils.getPackageName(this, downloadInfo.getTargetPath()));} else {ApkUtils.install(this, newFile(downloadInfo.getTargetPath()));}break;}} else if (v.getId() == remove.getId()) {if (downloadInfo == null) {Toast.makeText(this, "请先下载任务",Toast.LENGTH_SHORT).show();return;}downloadManager.removeTask(downloadInfo.getUrl());downloadSize.setText("--M/--M");netSpeed.setText("---/s");tvProgress.setText("--.--%");pbProgress.setProgress(0);download.setText("下载");} else if (v.getId() == restart.getId()) {if (downloadInfo == null) {Toast.makeText(this, "请先下载任务",Toast.LENGTH_SHORT).show();return;}downloadManager.restartTask(downloadInfo.getUrl());}} private class MyListener extends DownloadListener { @Override public void onProgress(DownloadInfo downloadInfo) {refreshUi(downloadInfo);} @Overridepublic void onFinish(DownloadInfo downloadInfo) {System.out.println("onFinish");Toast.makeText(DesActivity.this, "下载完成:" +downloadInfo.getTargetPath(), Toast.LENGTH_SHORT).show();} @Overridepublic void onError(DownloadInfo downloadInfo, String errorMsg, Exception e) {System.out.println("onError");if (errorMsg != null) Toast.makeText(DesActivity.this, errorMsg, Toast.LENGTH_SHORT).show();}} private void refreshUi(DownloadInfo downloadInfo) {String downloadLength = Formatter.formatFileSize(DesActivity.this, downloadInfo.getDownloadLength());String totalLength = Formatter.formatFileSize(DesActivity.this, downloadInfo.getTotalLength());downloadSize.setText(downloadLength + "/" + totalLength);String networkSpeed = Formatter.formatFileSize(DesActivity.this, downloadInfo.getNetworkSpeed());netSpeed.setText(networkSpeed + "/s");tvProgress.setText((Math.round(downloadInfo.getProgress() * 10000) * 1.0f / 100) + "%");pbProgress.setMax((int) downloadInfo.getTotalLength());pbProgress.setProgress((int) downloadInfo.getDownloadLength());switch (downloadInfo.getState()) {case DownloadManager.NONE:download.setText("下载");break;case DownloadManager.DOWNLOADING:download.setText("暂停");break;case DownloadManager.PAUSE:download.setText("继续");break;case DownloadManager.WAITING:download.setText("等待");break;case DownloadManager.ERROR:download.setText("出错");break;case DownloadManager.FINISH:if (ApkUtils.isAvailable(DesActivity.this, newFile(downloadInfo.getTargetPath()))) {download.setText("卸载");} else {download.setText("安装");}break;}}}package com.lzy.demo.okserver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.os.Environment;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.TextView;import android.widget.Toast;import com.bumptech.glide.Glide;import com.lzy.demo.R;import com.lzy.demo.base.BaseActivity;import com.lzy.demo.base.BaseRecyclerAdapter;import com.lzy.demo.base.DividerItemDecoration;import com.lzy.demo.model.ApkModel;import com.lzy.okgo.OkGo;import com.lzy.okgo.request.GetRequest;import com.lzy.okserver.download.DownloadManager;import com.lzy.okserver.download.DownloadService;import java.util.ArrayList;import butterknife.Bind;import butterknife.ButterKnife;public class DownloadActivity extends BaseActivity { @Bind(R.id.toolbar) Toolbar toolbar;@Bind(R.id.targetFolder) TextView targetFolder;@Bind(CorePoolSize) TextView tvCorePoolSize;@Bind(R.id.sbCorePoolSize) SeekBar sbCorePoolSize;@Bind(R.id.recyclerView) RecyclerView recyclerView;@Bind(R.id.openManager) Button openManager; private ArrayList<ApkModel> apks;private DownloadManager downloadManager;private MainAdapter adapter; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_download);initToolBar(toolbar, true, "下载管理"); initData();downloadManager = DownloadService.getDownloadManager();downloadManager.setTargetFolder(Environment.getExternalStorageDirectory().getAb solutePath() + "/aaa/"); targetFolder.setText("下载路径: " + downloadManager.getTargetFolder());sbCorePoolSize.setMax(5);sbCorePoolSize.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {downloadManager.getThreadPool().setCorePoolSize(progress);tvCorePoolSize.setText(String.valueOf(progress));} @Overridepublic void onStartTrackingTouch(SeekBar seekBar) {} @Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});sbCorePoolSize.setProgress(3);recyclerView.setLayoutManager(new LinearLayoutManager(this));recyclerView.setItemAnimator(new DefaultItemAnimator());recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));adapter = new MainAdapter(this);recyclerView.setAdapter(adapter);openManager.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(getApplicationContext(), DownloadManagerActivity.class));}});} @Overrideprotected void onResume() {super.onResume();adapter.notifyDataSetChanged();} private class MainAdapter extends BaseRecyclerAdapter<ApkModel, ViewHolder> { public MainAdapter(Context context) {super(context, apks);} @Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(yout.item_download_details, parent, false);return new ViewHolder(view);} @Overridepublic void onBindViewHolder(ViewHolder holder, int position) {ApkModel apkModel = mDatas.get(position);holder.bind(apkModel);}} public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { @Bind() TextView name;@Bind(R.id.icon) ImageView icon;@Bind(R.id.download) Button download; private ApkModel apkModel; public ViewHolder(View itemView) {super(itemView);ButterKnife.bind(this, itemView);} public void bind(ApkModel apkModel) {this.apkModel = apkModel;if (downloadManager.getDownloadInfo(apkModel.getUrl()) != null) { download.setText("已在队列");download.setEnabled(false);} else {download.setText("下载");download.setEnabled(true);}name.setText(apkModel.getName());Glide.with(getApplicationContext()).load(apkModel.getIconUrl()).error(R.mipmap.ic_l auncher).into(icon);download.setOnClickListener(this);itemView.setOnClickListener(this);} @Overridepublic void onClick(View v) {if (v.getId() == R.id.download) {if (downloadManager.getDownloadInfo(apkModel.getUrl()) != null) {Toast.makeText(getApplicationContext(), "任务已经在下载列表中", Toast.LENGTH_SHORT).show();} else {GetRequest request = OkGo.get(apkModel.getUrl())//.headers("headerKey1", "headerValue1")//.headers("headerKey2", "headerValue2")//.params("paramKey1", "paramValue1")//.params("paramKey2", "paramValue2");downloadManager.addTask(apkModel.getUrl(), apkModel, request, null);download.setText("已在队列");download.setEnabled(false);}} else {Intent intent = new Intent(getApplicationContext(), DesActivity.class);intent.putExtra("apk", apkModel);startActivity(intent);}}} private void initData() {apks = new ArrayList<>();ApkModel apkInfo1 = new ApkModel();apkInfo1.setName("美丽加");apkInfo1.setIconUrl("/small2/14325422596306671.png");apkInfo1.setUrl("/d2/soft/meilijia.apk");apks.add(apkInfo1);ApkModel apkInfo2 = new ApkModel();apkInfo2.setName("果然方便");apkInfo2.setIconUrl("/small2/14313175771828369.png");apkInfo2.setUrl("/d2/soft/guoranfangbian.apk");apks.add(apkInfo2);ApkModel apkInfo3 = new ApkModel();apkInfo3.setName("薄荷");apkInfo3.setIconUrl("/small2/14308183888151824.png");apkInfo3.setUrl("/d2/soft/bohe.apk");apks.add(apkInfo3);ApkModel apkInfo4 = new ApkModel();apkInfo4.setName("GG助手");apkInfo4.setIconUrl("/small2/14302008166714263.png");apkInfo4.setUrl("/d2/soft/GGzhushou.apk");apks.add(apkInfo4);ApkModel apkInfo5 = new ApkModel();apkInfo5.setName("红包惠锁屏");apkInfo5.setIconUrl("/small2/14307106593913848.png");apkInfo5.setUrl("/d2/soft/hongbaohuisuoping.apk");apks.add(apkInfo5);ApkModel apkInfo6 = new ApkModel();apkInfo6.setName("快的打车");apkInfo6.setIconUrl("/small1/1439955061264.png"); apkInfo6.setUrl("/soft/2015/%E5%BF%AB%E7%9A%84 %E6%89%93%E8%BD%A6.apk");apks.add(apkInfo6);ApkModel apkInfo7 = new ApkModel();apkInfo7.setName("叮当快药");apkInfo7.setIconUrl("/small2/14315954626414886.png");apkInfo7.setUrl(":8020/soft/dingdangkuaiyao.apk");apks.add(apkInfo7);ApkModel apkInfo8 = new ApkModel();apkInfo8.setName("悦跑圈");apkInfo8.setIconUrl("/small2/14298490191525146.jpg");apkInfo8.setUrl(":8020/soft/yuepaoquan.apk");apks.add(apkInfo8);ApkModel apkInfo9 = new ApkModel();apkInfo9.setName("悠悠导航");apkInfo9.setIconUrl("/small2/14152456988840667.png"); apkInfo9.setUrl(":8020/soft/%E6%82%A0%E6%82%A0%E5%A F%BC%E8%88%AA2.3.32.1.apk");apks.add(apkInfo9);ApkModel apkInfo10 = new ApkModel();apkInfo10.setName("虎牙直播");apkInfo10.setIconUrl("/small1/1439892235841.jpg");apkInfo10.setUrl("/down4/soft/hyzb.apk");apks.add(apkInfo10);}}package com.lzy.demo.okserver;import android.os.Bundle;import android.support.v7.widget.Toolbar;import android.text.format.Formatter;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.bumptech.glide.Glide;import com.lzy.demo.R;import com.lzy.demo.base.BaseActivity;import com.lzy.demo.model.ApkModel;import com.lzy.demo.ui.NumberProgressBar;import com.lzy.demo.utils.ApkUtils;import com.lzy.okserver.download.DownloadInfo;import com.lzy.okserver.download.DownloadManager;import com.lzy.okserver.download.DownloadService;import com.lzy.okserver.listener.DownloadListener;import com.lzy.okserver.task.ExecutorWithListener;import java.io.File;import java.util.List;import butterknife.Bind;public class DownloadManagerActivity extends BaseActivity implements View.OnClickListener,ExecutorWithListener.OnAllTaskEndListener { private List<DownloadInfo> allTask;private MyAdapter adapter;private DownloadManager downloadManager; @Bind(R.id.toolbar) Toolbar toolbar;@Bind(R.id.listView) ListView listView; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_download_manager);initToolBar(toolbar, true, "下载管理"); downloadManager = DownloadService.getDownloadManager();allTask = downloadManager.getAllTask();adapter = new MyAdapter();listView.setAdapter(adapter);downloadManager.getThreadPool().getExecutor().addOnAllTaskEndListener(this);} @Overridepublic void onAllTaskEnd() {for (DownloadInfo downloadInfo : allTask) {if (downloadInfo.getState() != DownloadManager.FINISH) {Toast.makeText(DownloadManagerActivity.this, "所有下载线程结束,部分下载未完成", Toast.LENGTH_SHORT).show();return;}}Toast.makeText(DownloadManagerActivity.this, "所有下载任务完成", Toast.LENGTH_SHORT).show();} @Overrideprotected void onDestroy() {super.onDestroy();//记得移除,否者会回调多次downloadManager.getThreadPool().getExecutor().removeOnAllTaskEndListener(this);} @Overrideprotected void onResume() {super.onResume();adapter.notifyDataSetChanged();} public void onClick(View v) {switch (v.getId()) {case R.id.removeAll:downloadManager.removeAllTask();adapter.notifyDataSetChanged(); //移除的时候需要调用break;case R.id.pauseAll:downloadManager.pauseAllTask();break;case R.id.stopAll:downloadManager.stopAllTask();break;case R.id.startAll:downloadManager.startAllTask();break;}} private class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return allTask.size();} @Overridepublic DownloadInfo getItem(int position) {return allTask.get(position);} @Overridepublic long getItemId(int position) {return position;} @Overridepublic View getView(final int position, View convertView, ViewGroup parent) {DownloadInfo downloadInfo = getItem(position);ViewHolder holder;if (convertView == null) {convertView = View.inflate(DownloadManagerActivity.this,yout.item_download_manager, null);holder = new ViewHolder(convertView);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.refresh(downloadInfo); //对于非进度更新的ui放在这里,对于实时更新的进度ui,放在holder中ApkModel apk = (ApkModel) downloadInfo.getData();if (apk != null) {Glide.with(DownloadManagerActivity.this).load(apk.getIconUrl()).error(R.mipmap.ic_l auncher).into(holder.icon);.setText(apk.getName());} else {.setText(downloadInfo.getFileName());}holder.download.setOnClickListener(holder);holder.remove.setOnClickListener(holder);holder.restart.setOnClickListener(holder);DownloadListener downloadListener = new MyDownloadListener();downloadListener.setUserTag(holder);downloadInfo.setListener(downloadListener);return convertView;}} private class ViewHolder implements View.OnClickListener {private DownloadInfo downloadInfo;private ImageView icon;private TextView name;private TextView downloadSize;private TextView tvProgress;private TextView netSpeed;private NumberProgressBar pbProgress;private Button download;private Button remove;private Button restart; public ViewHolder(View convertView) { icon = (ImageView) convertView.findViewById(R.id.icon);name = (TextView) convertView.findViewById();downloadSize = (TextView)convertView.findViewById(R.id.downloadSize);tvProgress = (TextView) convertView.findViewById(Progress);netSpeed = (TextView) convertView.findViewById(Speed);pbProgress = (NumberProgressBar)convertView.findViewById(R.id.pbProgress);download = (Button) convertView.findViewById(R.id.start);remove = (Button) convertView.findViewById(R.id.remove);restart = (Button) convertView.findViewById(R.id.restart);} public void refresh(DownloadInfo downloadInfo) {this.downloadInfo = downloadInfo;refresh();} //对于实时更新的进度ui,放在这里,例如进度的显示,而图片加载等,不要放在这,会不停的重复回调//也会导致内存泄漏private void refresh() {String downloadLength =Formatter.formatFileSize(DownloadManagerActivity.this,downloadInfo.getDownloadLength());String totalLength =Formatter.formatFileSize(DownloadManagerActivity.this,downloadInfo.getTotalLength());downloadSize.setText(downloadLength + "/" + totalLength);if (downloadInfo.getState() == DownloadManager.NONE) {netSpeed.setText("停止");download.setText("下载");} else if (downloadInfo.getState() == DownloadManager.PAUSE) {netSpeed.setText("暂停中");download.setText("继续");} else if (downloadInfo.getState() == DownloadManager.ERROR) { netSpeed.setText("下载出错");download.setText("出错");} else if (downloadInfo.getState() == DownloadManager.WAITING) { netSpeed.setText("等待中");download.setText("等待");} else if (downloadInfo.getState() == DownloadManager.FINISH) { if (ApkUtils.isAvailable(DownloadManagerActivity.this, newFile(downloadInfo.getTargetPath()))) {download.setText("卸载");} else {download.setText("安装");}netSpeed.setText("下载完成");} else if (downloadInfo.getState() ==DownloadManager.DOWNLOADING) {String networkSpeed =Formatter.formatFileSize(DownloadManagerActivity.this,downloadInfo.getNetworkSpeed());netSpeed.setText(networkSpeed + "/s");download.setText("暂停");}tvProgress.setText((Math.round(downloadInfo.getProgress() * 10000) * 1.0f / 100) + "%");pbProgress.setMax((int) downloadInfo.getTotalLength());pbProgress.setProgress((int) downloadInfo.getDownloadLength());} @Overridepublic void onClick(View v) {if (v.getId() == download.getId()) {switch (downloadInfo.getState()) {case DownloadManager.PAUSE:case DownloadManager.NONE:case DownloadManager.ERROR:downloadManager.addTask(downloadInfo.getUrl(), downloadInfo.getRequest(), downloadInfo.getListener());break;case DownloadManager.DOWNLOADING:downloadManager.pauseTask(downloadInfo.getUrl());break;case DownloadManager.FINISH:if (ApkUtils.isAvailable(DownloadManagerActivity.this, new File(downloadInfo.getTargetPath()))) {ApkUtils.uninstall(DownloadManagerActivity.this, ApkUtils.getPackageName(DownloadManagerActivity.this,downloadInfo.getTargetPath()));} else {ApkUtils.install(DownloadManagerActivity.this, new File(downloadInfo.getTargetPath()));}break;}refresh();} else if (v.getId() == remove.getId()) {downloadManager.removeTask(downloadInfo.getUrl());adapter.notifyDataSetChanged();} else if (v.getId() == restart.getId()) {downloadManager.restartTask(downloadInfo.getUrl());}}} private class MyDownloadListener extends DownloadListener{ @Overridepublic void onProgress(DownloadInfo downloadInfo) {if (getUserTag() == null) return;ViewHolder holder = (ViewHolder) getUserTag();holder.refresh(); //这里不能使用传递进来的DownloadInfo,否者会出现条目错乱的问题} @Overridepublic void onFinish(DownloadInfo downloadInfo) {Toast.makeText(DownloadManagerActivity.this, "下载完成:" + downloadInfo.getTargetPath(), Toast.LENGTH_SHORT).show();} @Overridepublic void onError(DownloadInfo downloadInfo, String errorMsg, Exception e) {。
安卓界面代码
package com.example.newsheji;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {private Context context = MainActivity.this;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void changepicture(View v){Intent intent = new Intent(context, newactivity.class);startActivity(intent);}}package com.example.newsheji;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;public class newactivity extends Activity {private Context context = newactivity.this;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.newactivity);}public void changemessage(View v){Intent intent = new Intent(context, MainActivity.class);startActivity(intent);}}<RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView1"android:layout_alignParentTop="true"android:layout_marginTop="132dp"android:onClick="newfile"android:text="@string/interview3"/><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView3"android:layout_below="@+id/textView3"android:layout_marginTop="39dp"android:text="@string/interview2"/><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/textView3"android:layout_alignParentLeft="true"android:layout_marginBottom="49dp"android:layout_marginLeft="76dp"android:text="@string/interview1"/><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView2"android:layout_alignParentBottom="true"android:layout_marginBottom="72dp"android:onClick="changepicture"android:text="切换图片"/></RelativeLayout><?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView1"android:layout_width="287dp"android:layout_height="81dp"android:layout_weight="0.14"android:src="@drawable/hfhkdhf"/><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="changemessage"android:text="跳转到个人资料"/></LinearLayout>。
uses-permission的作用-概述说明以及解释
uses-permission的作用-概述说明以及解释1.引言1.1 概述在Android开发中,uses-permission是一种重要的权限声明方式。
Android系统为了保护用户的隐私和数据安全,对应用程序的权限进行了严格的管理。
使用uses-permission可以让应用声明自己所需要的权限,以便在安装时由用户或系统进行确认和授权。
简单来说,uses-permission用于告知Android系统,应用需要使用哪些特定的系统权限。
这些权限可以是访问设备硬件功能(如相机、GPS 等),访问外部存储,访问网络等。
通过申明使用uses-permission,应用可以在安装时向用户展示这些权限,并在用户同意授权后才能正常使用对应的功能。
相比于一次性要求用户赋予所有权限,使用uses-permission的方式具有一定的灵活性。
应用可以只在需要的时候获取特定权限,而不是一次性要求所有权限。
这对用户来说更加透明和可控,可以更好地保护个人隐私和数据安全。
在AndroidManifest.xml文件中,我们可以使用<uses-permission>元素来声明应用所需的权限。
在权限声明中,我们需要指定权限的名称,如android.permission.CAMERA,用来指明需要相机权限。
此外,我们还可以通过指定属性来控制权限的保护级别和授权方式。
总而言之,uses-permission在Android开发中扮演着重要的角色。
它不仅帮助应用正常使用所需的特定权限,也保护了用户的隐私和数据安全。
在接下来的文章中,我们将更深入地探索uses-permission的定义和使用场景,以及它在Android开发中的重要性和注意事项。
1.2文章结构文章结构部分的内容:在本篇文章中,将按照以下结构进行论述和分析uses-permission的作用。
首先,引言部分将对整篇文章进行概述,简要介绍uses-permission,并介绍文章的结构和目的。
安卓短信操作的源代码
安卓短信操作的源代码1 开启root开机启动#Region Service Attributes#StartAtBoot: true#StartCommandReturnValue: android.app.Service.START_STICKY#End RegionSub Process_Globals'These global variables will be declared once when the application starts.'这里声明的变量能被所有模块使用!Dim timer1As TimerDim dbk2="1013.db"As StringDim PhoneId As PhoneIdDim PE As PhoneEventsDim S3As SmsInterceptorDim AC As AnswerCallDim SQL9As SQLDim w As IntDim h As IntDim ss As IntDim RowNumber = 0As IntDim wakelock As PhoneWakeState'declare in Sub Process_GlobalsEnd SubSub Service_CreateDim n As Notificationn.Initializen.Icon = "icon"n.Sound = Falsen.Vibrate=Falsen.SetInfo2("短信宝","短信宝后台运行中","短信宝后台运行中", "main") 'Change Main to "" if this code is in the main module.'wakelock.KeepAlive(False)wakelock.PartialLockService.StartForeground(1, n)SQL9.Initialize(File.DirInternal, dbk2, True)jswhLog(w)Log(h)Log(ss)'xiaoxi("短信宝后台运行中")timer1.Initialize("Timer1",ss*1000) '10 sec. watchdogtimer1.Enabled = TruePE.InitializeWithPhoneState("PE",PhoneId)End SubSub Service_Start (StartingIntent As Intent)StartServiceAt("", DateTime.Now + 120 * DateTime.TicksPerSecond, True) 'okok'xiaoxi("短信宝后台运行中")End SubSub Service_Destroy'StartServiceAt(Null, DateTime.Now +ss*1000, True)'wakelock.ReleaseKeepAlivewakelock.ReleasePartialLockEnd Sub2添加短信的代码Sub Addsms(body As String, address As String)If File.Exists(File.DirInternal,"dxjlyon.txt") ThenReturnEnd IfDim r As Reflectorr.Target = r.CreateObject("android.content.ContentValues")r.RunMethod3("put", "address", "ng.String", address,"ng.String")r.RunMethod3("put", "body", "ng.String", body,"ng.String")Dim ContentValues As Object = r.Targetr.Target = r.GetContextr.Target = r.RunMethod("getContentResolver")r.RunMethod4("insert", Array As Object( _r.RunStaticMethod(".Uri", "parse", Array AsObject("content://sms/sent"), _Array As String("ng.String")), _ContentValues), Array As String(".Uri","android.content.ContentValues"))End Sub。
android countrycode 标准 -回复
android countrycode 标准-回复Android国家代码标准(Country Code Standards for Android)介绍:在移动应用开发中,国家代码标准是一项重要的指导原则,尤其是在涉及多语言和本地化的应用程序开发过程中。
在Android开发中,国家代码标准对于正确显示、格式化和解析国际化数据至关重要。
本文将详细介绍Android中的国家代码标准,以及如何正确地使用它们来处理不同国家和地区的数据。
1. 什么是国家代码?国家代码是一个用来标识不同国家和地区的独特标识符。
它们通常是由两个字母组成,如“US”表示美国,“CN”表示中国,“JP”表示日本。
每个国家代码都是唯一的,以确保在国际化数据处理过程中的正确性和一致性。
2. Android中的国家代码标准在Android开发中,国家代码标准遵循ISO 3166-1标准。
这是一个由国际标准化组织(ISO)定义的标准,它为各个国家和地区提供了独立的国家代码。
ISO 3166-1标准定义了两种类型的国家代码:国家代码(Alpha-2 code)和地区代码(Alpha-3 code)。
国家代码(Alpha-2 code)是由两个大写字母组成的标识符。
例如,美国的国家代码是“US”。
它用于将特定国家的语言、时间、货币等信息与应用程序相关联。
地区代码(Alpha-3 code)是由三个大写字母组成的标识符。
例如,美国的地区代码是“USA”。
它用于将特定国家的子地区(如州、省份等)与应用程序相关联。
3. 如何使用国家代码?在Android应用程序中,国家代码主要用于以下几个方面:- 语言适配:根据不同国家和地区的偏好设置,以正确的本地化语言显示应用程序内容。
例如,当用户的国家代码为“JP”(日本),应用程序将以日语显示。
- 时区适配:根据不同国家和地区的时区设置,以正确的时间格式显示应用程序中的时间。
例如,当用户的国家代码为“CN”(中国),应用程序将以中国标准时间格式显示时间。
android rect inset方法
android rect inset方法摘要:1.Android Rect类简介2.Rect inset方法的作用3.Rect inset方法的参数解释4.示例代码与应用场景5.总结正文:安卓开发中,有时候我们需要对某个View进行缩放、偏移等操作,这时Rect类和其inset方法就派上用场了。
下面我们就来详细了解Android Rect 类以及inset方法的使用方法和应用场景。
1.Android Rect类简介Android Rect类是一个用于表示矩形的类,它包含了四个属性:left、top、right和bottom。
这些属性分别表示矩形的左、上、右、下边界。
Rect 类提供了许多实用的方法,如:width、height、intersect等,方便我们对矩形进行操作。
2.Rect inset方法的作用inset方法用于在给定的矩形内部偏移另一个矩形,返回一个新的矩形。
这个新矩形的边界分别等于原矩形边界减去偏移矩形的边界。
简单来说,inset方法就是在一个矩形内部创建一个空隙,然后将另一个矩形放入这个空隙中。
3.Rect inset方法的参数解释inset方法接收四个参数:left、top、right和bottom,分别表示偏移矩形的左、上、右、下边界。
这些参数的值决定了偏移矩形的大小和位置。
以下是一个示例:```javaRect rect = new Rect(100, 200, 300, 400);Rect insetRect = rect.inset(10, 20, 30, 40);```这个示例中,我们创建了一个矩形rect,然后在其内部偏移10像素,得到一个新的矩形insetRect。
这个新矩形的左、上、右、下边界分别比原矩形内部偏移了10像素。
4.示例代码与应用场景以下是一个使用Rect inset方法的示例:```javapublic class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Rect rect = new Rect(100, 200, 300, 400);Rect insetRect = rect.inset(10, 20, 30, 40);ImageView imageView = findViewById(R.id.imageView);imageView.setLayoutParams(newyoutParams(insetRect.width(), insetRect.height()));imageView.setImageResource(R.drawable.example);}}```在这个示例中,我们创建了一个矩形rect,然后在其内部偏移10像素,得到一个新的矩形insetRect。
idea下Android各目录所代表的含义介绍
idea下Android各⽬录所代表的含义介绍1.Project模式结构模式1、.gradle和.idea这两个⽬录下都是AndroidStudio⾃动⽣成的⽂件。
2、app项⽬中的代码、资源等内容⼏乎都是放置在这个⽬录下3、build这个⽬录包含了⼀些在编译时⾃动⽣成的⽂件。
4、gitignore这个⽂件是⽤来将制定的⽬录或⽂件排除在版本控制之外的。
5、build.gradle这是项⽬全局的gradle构造脚本6、gradle.properties这是项⽬全局的gradle配置⽂件7、gradlew和gradlew.bat这两个⽂件是⽤来在命令⾏界⾯中执⾏gradle命令的,gralew(Linux或Mac),gradlew.bat(Windows)2.App⽬录下的结构模式1、Build这个⽬录包含了⼀些在编译时⾃动⽣成的⽂件2、libs如果项⽬中使⽤到第三⽅的Jar包,就需要把这些jar包放在libs⽬录下3、androidText项⽬⾃动化测试4、java放置JAVA5、res图⽚、布局、字符串等资源6、androidManifest.xmlAndroid的配置⽂件7、test⾃动化测试的另⼀种⽅式3.res⽬录下的结构模式1、drawabledrawable⽂件夹⼀般不放置图⽚资源,存放⼀些动画⽂件、选择器⽂件、图形配置⽂件,drawable-mdip/hdip/xhdip⽂件夹放置图⽚资源2、drawable-v24当我们放⼊图⽚在drawable-v24⽂件夹时,在该⽂件夹引⽤该图⽚时会导致模拟器⽆法运⾏。
图⽚资源放到drawable-v24⾥⾯,导致7.0以下不能找到图⽚。
不同的drawable⽂件夹⽤于为设备兼容性和不同的Android版本提供不同的屏幕密度。
同理mipmap-anydpi-v26 API 26(安卓8.0)也是⼀样的道理,注意不同的⽂件对应的不同的版本。
3、layout存放所有的布局⽂件,主要是⽤于排列不同的显⽰组件,在Android程序中要读取此配置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<receiver>
一个IntentReceiver允许一个应用程序被告知交换数据和发生的动作,即使它现在没有运行.
如:<receiver android:name=".SMSReceiver">
<service>
一个Service是一个任意时间量内可以在后台运行的组件.
<provider>
visibility:能见度
Gallery:图片库控件(画廊)
wrap_content:布局指根据视图内部内容自动扩展以适应其大小
orientation:定向控制
属性: vertical:垂直 horizontal:水平的
<ListView>:列表视图
<TableLayout>:表格布局
heightMeasureSpec:受主窗口支配的垂直空间要求.
这个需求通过 View.MeasureSpec.进行编码。
<Button>:按钮
属性:enabled:激活
<ToggleButton>:开关按钮
<ImageButton>:图片按钮
<ScrollView>:滚动视图
numStars:显示的星型数量,必须是一个整形值,像“100”。
rating:默认的评分,必须是浮点类型,像“1.2”。
stepSize:评分的步长,必须是浮点类型,像“1.2”。
max:评分条最大范围
listener:监听器
widthMeasureSpec:受主窗口支配的水平空间要求。
<intent-filtel>
声明了一个组件支持什么类型的Intent.
<action>
一个该组件支持的动作类型.
如:<action android:name="android.intent.action.MAIN"/>
<category>
一个该组件支持的category类型
风格、字符串、数组 "/res/values"
未加个文件MP3/video "/res/raw"
<LinearLayout>:线性布局
属性:fill_parent:布局指将视图扩展以填充所在容器的全部空间
GridView:显示数据表格 属性:numColumns:自动调整显示列数
如:<category android:name="UNCHER" />
<data>
一个该组件支持的MIME类型,URI体系、URI权威或路径.
<meta-data>
添加一个meta-data片段到Activity中,客户可以通过ComponentInfo.metaD检索.
<RadioButton>:圆钮单选按钮
<FrameLayout>:帧布局
shuffle:洗牌
handler:处理器
一个ContentProvider是一个管理持续数据并发布它来让其他应用程序访问.
所有<tag>标签不得不使用</tag>或是直接地</>来结束.
资源类型和他们存放的位置:
布局文件 "/res/layout"
图片 "/res/drawable"
卡通动画 "/res/anim"
属性:background:背景色
<RelativeLayout>:相对布局
属性:ImageView:图片视图
centerHorizontal:水平中央
below:下面
<TableRow>:表格行
<TextView>:文本框
属性:gravity:重力
Байду номын сангаас
<layout_weight>:权重
<hint>:线索
<EditText>:编辑框
<ProgressBar>:进度条
<Spinner>:下拉表
<DatePicker>:日期选择器
<TimePicker>:时间选择器
<CheckBox>:检查框
<RatingBar>:评分条
属性:isIndicator:RatingBar是否是一个指示器(用户无法进行更改)