子曰:学而时习之,不亦说乎

是啊,学习了要经常温习才行;尤记得大一大二的时候自己爱上了编程;那时的我在地摊上买了一本ASP动态网站编程,还记得花了5块钱。
而后的日子我把那本书翻的几乎成了一张张的样子;然后结合老师讲的HTML语法;自己就慢慢的捣鼓了一个班级网站出来;想想心里还是挺激动的。
这么久过去了,VBScript 的知识忘得差不多了;以后找个机会再看看。这次写这个是为了记录下我最近接手的一个项目中遇到的一些第一次遇到的问题或者疑惑吧。
由于项目还没有完,所以持续更新...
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/41849241
========================================================

读取浏览器历史记录

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
{   String string = null;ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(Uri.parse("content://browser/bookmarks"), new String[]{"url"}, null, null, null);while (cursor != null && cursor.moveToNext()) {string = cursor.getString(cursor.getColumnIndex("url"));Log.d("debug", string == null ? "null":string);
}

模拟返回键功能

1.java.lang.Runtime
Runtime runtime = Runtime.getRuntime();
runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);
2.android.app.Instrumentation
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

监听开机启动广播

public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {do...}}
}
<receiver android:name=".BootReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

判断移动网络类型

    /*** 判断移动网络类型** @param networkType telephonyManager.getNetworkType()* @return 网络类型*/static int getMobileNetworkType(int networkType) {/*GPRS       2G(2.5) General Packet Radia Service 114kbpsEDGE       2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbpsUMTS      3G WCDMA 联通3G Universal Mobile Telecommunication System 完整的3G移动通信技术标准CDMA     2G 电信 Code Division Multiple Access 码分多址EVDO_0   3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3GEVDO_A  3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G1xRTT      2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,HSDPA    3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbpsHSUPA    3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbpsHSPA      3G (分HSDPA,HSUPA) High Speed Packet AccessIDEN      2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)EVDO_B 3G EV-DO Rev.B 14.7Mbps 下行 3.5GLTE        4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4GEHRPD  3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级HSPAP  3G HSPAP 比 HSDPA 快些*/switch (networkType) {case TelephonyManager.NETWORK_TYPE_GPRS:case TelephonyManager.NETWORK_TYPE_EDGE:case TelephonyManager.NETWORK_TYPE_CDMA:case TelephonyManager.NETWORK_TYPE_1xRTT:case TelephonyManager.NETWORK_TYPE_IDEN:return Note.NETWORK_TYPE_2G;case TelephonyManager.NETWORK_TYPE_UMTS:case TelephonyManager.NETWORK_TYPE_EVDO_0:case TelephonyManager.NETWORK_TYPE_EVDO_A:case TelephonyManager.NETWORK_TYPE_HSDPA:case TelephonyManager.NETWORK_TYPE_HSUPA:case TelephonyManager.NETWORK_TYPE_HSPA:case TelephonyManager.NETWORK_TYPE_EVDO_B:case TelephonyManager.NETWORK_TYPE_EHRPD:case TelephonyManager.NETWORK_TYPE_HSPAP:return Note.NETWORK_TYPE_3G;case TelephonyManager.NETWORK_TYPE_LTE:return Note.NETWORK_TYPE_4G;default:return Note.NETWORK_TYPE_UNKNOWN;}}

读取通话记录

final Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI, new String[] {
CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME,
CallLog.Calls.TYPE, CallLog.Calls.DATE }, null, null,
CallLog.Calls.DEFAULT_SORT_ORDER);
final Cursor cursor = cr.query(数据库表名,取得的数据数组(里边包含字段名称),条件,参数组,排序等信息) //这就相当于一条SQL语句//取得所有通话信息  这里边稍微有点复杂
for (int i = 0; i < cursor.getCount(); i++) {cursor.moveToPosition(i);str = cursor.getString(0);type = cursor.getInt(2);if (type == 3) {tel = str;break;}
} //取得值
final Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI, new String[] {
CallLog.Calls.NUMBER }, "type=3", null,
"date desc limit 1");
//这个就是取得最近的一次未接来电的电话号码。
if(cursor.moveToFirst()){tel = cursor.getString(0);
}
这个取值之后和最上边的值是一样的。
CallLog.Calls.CONTENT_URI (通话记录数据库)
CallLog.Calls.NUMBER (通话号码)
CallLog.Calls.CACHED_NAME (通话人姓名)
CallLog.Calls.TYPE (通话类型)
呼叫记录有三种类型:来电:CallLog.Calls.INCOMING_TYPE (常量值:1)已拨:CallLog.Calls.OUTGOING_TYPE(常量值:2)未接:CallLog.Calls.MISSED_TYPE(常量值:3)其实还有一种类型-拒接 系统未给出常量。但经测试后得出结论为4.
CallLog.Calls.DATE (通话时间)CallLog.Calls.CONTENT_URI : 等价于:Uri.parse("content://call_log/calls");
            //过滤未接电话//通话时长0~11秒//时间为:开始响铃~结束时间String whereStr = CallLog.Calls.TYPE + "!=3 AND " + CallLog.Calls.DURATION + ">0 AND " + CallLog.Calls.DURATION + "<11 AND " + CallLog.Calls.DATE + ">" + startTime + " AND " + CallLog.Calls.DATE + "<" + endTime;//倒叙并查询Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, new String[]{CallLog.Calls.NUMBER}, whereStr, null, null);bFlag = cursor.getCount() > 0;cursor.close();
需要声明的权限 在AndroidManifest.xml中加入<uses-permission android:name="android.permission.READ_CONTACTS" /> 读记录<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 写记录
这两条是和<application>节点同级的 如果想加入呼叫权限,还要加上<uses-permission android:name="android.permission.CALL_PHONE" />
还有发送短信权限<uses-permission android:name="android.permission.SEND_SMS" />
还有连接互联网权限<uses-permission android:name="android.permission.INTERNET" />

再次点击返回键退出程序

    // 复写返回事件public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if ((System.currentTimeMillis() - mExitTime) > 2000) {Toast.makeText(this, R.string.label_press_main, Toast.LENGTH_SHORT).show();mExitTime = System.currentTimeMillis();} else {finish();}return true;} elsereturn super.onKeyDown(keyCode, event);}

ActiveAndroid 与 Gson 冲突

问题描述:ActiveAndroid  Model 中无法通过 Gson 进行实例化,原因是 ActiveAndroid  Model 中含有无法通过 Gson 转换的字段;

解决方案:在 ActiveAndroid  Model 中对指定的类进行过滤:

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
/*** Created by QiuJu* on 2014/9/16.*/
public class SpecificClassExclusionStrategy implements ExclusionStrategy {private final Class<?> excludedThisClass;private final Class<?> excludedThisClassFields;/*** 过滤器初始化** @param excludedThisClass       该类和继承自该类的对象实例将被忽略* @param excludedThisClassFields 该类的属性将不被序列化*/public SpecificClassExclusionStrategy(Class<?> excludedThisClass, Class<?> excludedThisClassFields) {this.excludedThisClass = excludedThisClass;this.excludedThisClassFields = excludedThisClassFields;}@Overridepublic boolean shouldSkipClass(Class<?> clazz) {return clazz != null && (clazz.equals(excludedThisClass) || shouldSkipClass(clazz.getSuperclass()));}@Overridepublic boolean shouldSkipField(FieldAttributes f) {return f.getDeclaringClass().equals(excludedThisClassFields);}
}
        GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.setExclusionStrategies(new SpecificClassExclusionStrategy(null, Model.class));gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");Gson gson = gsonBuilder.create();NotePutModel model = new NotePutModel();model.setPhoneId(Settings.getPhoneId());model.setPhoneMark(Settings.getPhoneMark());model.setNotes(Note.getAll(false));JSONObject jsonObject = null;try {jsonObject = new JSONObject(gson.toJson(model));} catch (JSONException e) {e.printStackTrace();}

获取基站信息

    public static String getCellPos(TelephonyManager mTelephonyManager) {String result = null;try {// 返回值MCC + MNCString operator = mTelephonyManager.getNetworkOperator();if (operator != null && operator.length() > 0) {int mcc = Integer.parseInt(operator.substring(0, 3));int mnc = Integer.parseInt(operator.substring(3));// 中国移动和中国联通获取LAC、CID的方式GsmCellLocation location = (GsmCellLocation) mTelephonyManager.getCellLocation();int lac = location.getLac();int cellId = location.getCid();result = " MCC = " + mcc + "\t MNC = " + mnc + "\t LAC = " + lac + "\t CID = " + cellId;// 中国电信获取LAC、CID的方式/*CdmaCellLocation location1 = (CdmaCellLocation) mTelephonyManager.getCellLocation();lac = location1.getNetworkId();cellId = location1.getBaseStationId();cellId /= 16;*/// 获取邻区基站信息List<NeighboringCellInfo> infos = mTelephonyManager.getNeighboringCellInfo();StringBuilder sb = new StringBuilder("Size: " + infos.size() + "\n");for (NeighboringCellInfo info1 : infos) { // 根据邻区总数进行循环sb.append(" LAC : ").append(info1.getLac()); // 取出当前邻区的LACsb.append(" CID : ").append(info1.getCid()); // 取出当前邻区的CIDsb.append(" BSSS : ").append(-113 + 2 * info1.getRssi()).append("\n"); // 获取邻区基站信号强度}result += " Neighbor:" + sb.toString();}} catch (Exception e) {e.printStackTrace();}return result;}

Java Android Date Gson Json 解析字符串String时间中含有 T 报错的问题:

问题描述:时间字符串中含有“T”字符,无法进行对应的格式化。出现:ParseException: unparseable date 
界面方案:设置格式串: “yyyy-MM-dd'T'HH:mm:ss“

   public static Gson getNoteReplyGson() {GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.setExclusionStrategies(new SpecificClassExclusionStrategy(null, Model.class));gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");return gsonBuilder.create();}

百度定位问题

问题描述:在使用百度定位的时候出现,调用 LocationClient.start() 后返回 False 且,不回调回调函数;但是在有一部手机上能正常使用。
解决办法:将默认的 JNI(armeabi) 文件,拷贝为全平台。

附上获取百度地图的一个封装类:

class LocationBuilder implements BDLocationListener {CountDownLatch mLatch;LocationClient mClient;Location mLocation;public LocationBuilder(final Context context) {this.mLatch = new CountDownLatch(1);this.mLocation = new Location();ToolKit.runOnMainThreadSync(new Runnable() {@Overridepublic void run() {mClient = buildLocation(context);mClient.registerLocationListener(LocationBuilder.this);mClient.start();}});try {this.mLatch.await(15, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();this.stop();}}public Location getLocation() {Location location = mLocation;mLocation = null;return location;}private void stop() {try {mClient.unRegisterLocationListener(this);mClient.stop();} catch (Exception e) {e.printStackTrace();}}private LocationClient buildLocation(Context context) {LocationClient locationClient = new LocationClient(context);     //声明LocationClient类LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置定位模式option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02option.setScanSpan(1000);//设置发起定位请求的间隔时间为1000msoption.setIsNeedAddress(true);locationClient.setLocOption(option);return locationClient;}@Overridepublic void onReceiveLocation(BDLocation location) {this.stop();try {if (mLatch != null) {int[] codes = new int[]{61, 65, 66, 68, 161};if (Arrays.binarySearch(codes, location.getLocType()) >= 0) {mLocation.setLongitude(location.getLongitude());mLocation.setLatitude(location.getLatitude());mLocation.setRadius(location.getRadius());mLocation.setAddress(location.getAddrStr());mLocation.setAltitude(location.getAltitude());}mLatch.countDown();}} catch (Exception e) {e.printStackTrace();}}
}

IIS 服务器下载apk文件报404错

文件路径什么都对,可就是提示404错误,最后问题出在了IIS的MIME上,按照下面的办法即可解决。

  1. 在 IIS 管理器中,右键单击要为其添加 MIME 类型的网站或网站目录,单击"属性"。
  2. 单击"HTTP 头"选项卡。
  3. 单击"MIME 类型"。
  4. 单击"新建"。
  5. 在"扩展名"框中,键入文件扩展名:.apk
  6. 在"MIME 类型"框中,键入application/octet-stream
  7. 单击"确定"。

========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/41849241
========================================================

[Android] 开发一款软件我学到了些什么?相关推荐

  1. 基于Android开发的备忘录软件(创建、通知)

    基于Android开发的备忘录软件(创建.通知) 系统概述 系统总体设计 系统设计与实现部分 关键代码及说明 程序运行截图 学习点 系统概述 结合本学期课程所学的关于Android通知的知识以及期中期 ...

  2. 4 年开发 43 款软件,这位乡村教师火了

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 今天,一则#乡村教师自学编程4年开发43款软件#的话题冲上微博热搜.主人公彭龙是四川泸州一名乡村数学教师,4年多来他自学编程,开 ...

  3. 怎么去开发一款软件?

    一般而言开发一款软件,大致需要这三个大模块:需求分析.代码编写.软件测试. 首先,分析用户需求,进行客户调研. 这个过程是开发一款软件的关键性步骤,需要准确把握用户的需求.若需求不够明确.那么后期的工 ...

  4. javaScript计算体重:开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适(代码)

    题目:开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动.来观察测试者体重是否合适 代码: var height = prompt("请输入身高:"); va ...

  5. android api版本 闪退_经验分享:从事 Android 开发六年,我学到的那些事

    你的代码质量应该随着经验的增加而提高,在本文作者基于 Android 开发者六年间,其都学到了什么? 以下为译文: 六年来,我为多家公司编写过各种应用程序.你编写代码或处理代码库的文化和方式会随着你的 ...

  6. 从事 Android 开发六年,我学到的那些事!

    你的代码质量应该随着经验的增加而提高,在本文作者基于 Android 开发者六年间,其都学到了什么? 作者 | Mrudula 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnew ...

  7. Android开发p图软件,媲美大神P图效果 Android软件抠图神手

    媲美大神P图效果 Android软件抠图神手 2013年02月20日 01:50作者:杨霏霏编辑:杨霏霏文章出处:泡泡网原创 分享 泡泡网手机频道2月20日 PS的功能大家耳熟能详,其中抠图便是各位P ...

  8. 中高端Android开发人才进,享学课堂忠实陪伴,让学习成为一种享受

    今天为大家推荐的是享学课堂最新出品的Android安卓移动互联网架构开发课程,包含音视频.Kotlin.Jetpack.Flutter等技术讲解与源码解析,在理论讲解的过程中穿插实战项目,每个知识点都 ...

  9. android 蓝牙控制开发,Android开发工控软件--蓝牙控制

    最近一直在忙Android的工控软件设计,写一点心得,希望对这方面开发的有一点带你帮助. 1)从蓝牙接收了数据又如何保存? 之前没有想过接收的数据如何保存,就简单的用一个字节数组进行保存,后来处理数据 ...

  10. Android开发之在软件内录屏录画面,直接CV就能用

    关于Android开发录屏的资料,真的是很难找到那种拿来就能用的,不是付费专栏就是要积分才能下载源码,起不到任何帮助.我需要的是录制软件画面,找到的几个例子都是录制时返回桌面,然后弹出小窗口开始录制桌 ...

最新文章

  1. hdu3790 最短路径问题(spfa)
  2. 计算机网络(第四章网络层)
  3. Windows 7安装PlayReady出现“任务被禁用”错误信息
  4. 程序员的算法课(2)-排序算法
  5. PHp批量推送数据太慢,PHP非阻塞批量推送数据
  6. Java Web学习总结(18)——JSP标签
  7. spring-boot-1.4x后@ConfigurationProperties注解舍弃location
  8. 【Qt串口调试助手】1.7 - QLabel标签插入链接,修改Qt应用图标
  9. git、cocoapod组件化开发常用命令
  10. 1028: [JSOI2007]麻将 - BZOJ
  11. QQ在线客服代码 网页qq咨询html代码
  12. android shape大小,Android中shape属性详解
  13. Hairpin流量, 发卡流量怎么理解
  14. SAP License:仓库ERP系统
  15. 1.16. BIP39协议:使用助记词生成确定性钱包
  16. 家用小型中央空调发展的现状与趋势
  17. win10 设置ctrl+shift 切换 中文输入法 英文输入法
  18. ubuntu 有key登入sshd Failed publickey for xxx from xx port Xxx ssh2
  19. 【技术探索】利用m3u8下载ts并合并成一个完整视频
  20. 数据流角度看DSO(一)

热门文章

  1. perl软件使用报错总结
  2. 使用wireshark对HTTPS解密
  3. Raki的读paper小记:GloVe: Global Vectors for Word Representation
  4. 能力提升综合题单 Part 8.9.1 最大流
  5. 计算机主机光驱弹不出来怎么办,win7系统电脑按下光驱按钮托盘就是弹不出来怎么办...
  6. linux模拟http请求命令
  7. 【hihocoder 1554】最短的 Nore0061
  8. 五个最佳RSS新闻阅读器
  9. LeetCode--Restore IP Addresses
  10. 15个很有用的 HTML5 基础教程和速查手册