转自http://blog.csdn.net/lilu_leo/article/details/7743108


不知不觉中,就收集了超过95条的自己感觉有意思的代码片段,分为五篇文章:android有用代码片段、Android有用代码片段(二)、Android有用代码片段(三)、Android有用代码片段(四)

Android有用代码片段(五)。这五篇,今天,开始第六篇的整理!这里解释一下,因为一、二、三都是每个有20个片段,但是在四中,由于第70个代码过长,所以在第四篇中,只有10个片段。 第五篇里面有25个。


九十六、java.util.MissingFormatArgumentException错误

在有站位符的打印语句中,经常会犯下一个错误。

如:System.out.printf( "y=%3d "+y),就会报这个错误。

应修改为:;改为System.out.printf( "y=%3d ",y)


九十七、Android判断是Pad或者手机

[java] view plain copy
  1. publicbooleanisTabletDevice(){
  2. TelephonyManagertelephony=(TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);
  3. inttype=telephony.getPhoneType();
  4. if(type==TelephonyManager.PHONE_TYPE_NONE){
  5. returntrue;
  6. }else{
  7. returnfalse;
  8. }
  9. }

九十八、判断android网络状态

[java] view plain copy
  1. StatemWifiState=null;
  2. StatemMobileState=null;
  3. ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  4. mWifiState=cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
  5. mMobileState=cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
  6. .getState();
  7. if(mWifiState!=null&&mMobileState!=null&&State.CONNECTED!=mWifiState
  8. &&State.CONNECTED==mMobileState){
  9. //手机网络连接成功
  10. }elseif(mWifiState!=null&&mMobileState!=null&&State.CONNECTED!=mWifiState&&State.CONNECTED!=mMobileState){
  11. mHandler.sendEmptyMessage(MSG_SHOW_NET_DIALOG);
  12. }elseif(mWifiState!=null&&State.CONNECTED==mWifiState){
  13. //无线网络连接成功
  14. }


九十九、ImageView的ScaleType属性

ImageView.ScaleType|android:scaleType值的意义:

ImageView.ScaleType.CENTER|android:scaleType="center"按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

ImageView.ScaleType.CENTER_CROP|android:scaleType="centerCrop"按比例扩大图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽)

ImageView.ScaleType.CENTER_INSIDE|android:scaleType="centerInside"将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长(宽)等于或小于View的长(宽)

ImageView.ScaleType.FIT_CENTER|android:scaleType="fitCenter"把图片按比例扩大(缩小)到View的宽度,居中显示

ImageView.ScaleType.FIT_END|android:scaleType="fitEnd"把图片按比例扩大(缩小)到View的宽度,显示在View的下部分位置

ImageView.ScaleType.FIT_START|android:scaleType="fitStart"把图片按比例扩大(缩小)到View的宽度,显示在View的上部分位置

ImageView.ScaleType.FIT_XY|android:scaleType="fitXY"把图片按照指定的大小在View中显示

ImageView.ScaleType.MATRIX|android:scaleType="matrix"用matrix来绘制


一百、垂直进度条

  1. @Override
  2. protectedsynchronizedvoidonDraw(Canvascanvas)
  3. {
  4. //TODOAuto-generatedmethodstub
  5. canvas.rotate(-90);//反转90度,将水平ProgressBar竖起来
  6. canvas.translate(-getHeight(),0);//将经过旋转后得到的VerticalProgressBar移到正确的位置,注意经旋转<spanstyle="white-space:pre"></span>后宽高值互换
  7. super.onDraw(canvas);
  8. }

一零一、android获取本机Ip地址


[java] view plain copy
  1. publicStringgetLocalIpAddress(){
  2. try{
  3. for(Enumeration<NetworkInterface>en=NetworkInterface
  4. .getNetworkInterfaces();en.hasMoreElements();){
  5. NetworkInterfaceintf=en.nextElement();
  6. for(Enumeration<InetAddress>enumIpAddr=intf
  7. .getInetAddresses();enumIpAddr.hasMoreElements();){
  8. InetAddressinetAddress=enumIpAddr.nextElement();
  9. if(!inetAddress.isLoopbackAddress()){
  10. returninetAddress.getHostAddress().toString();
  11. }
  12. }
  13. }
  14. }catch(SocketExceptionex){
  15. Log.e("WifiPreferenceIpAddress",ex.toString());
  16. }
  17. returnnull;
  18. }

别忘了加权限:

  1. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  2. <uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>


有时候,有的手机会有ip6地址,所以在if()判断里面,最好这样写:

[java] view plain copy
  1. if(!inetAddress.isLoopbackAddress()&&InetAddressUtils
  2. .isIPv4Address(inetAddress
  3. .getHostAddress().toString())){

一零二、开机启动

原理就是启动一个BroadcastReceiver来监听系统发出的开机广播:Android.intent.action.BOOT_COMPLETED

[java] view plain copy
  1. publicclassStartupReceiverextendsBroadcastReceiver{
  2. @Override
  3. publicvoidonReceive(Contextcontext,Intentintent){
  4. //TODOAuto-generatedmethodstub
  5. //xxx你要跳转到的activity
  6. Intenti=newIntent(context,xxx.class);
  7. i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  8. //将intent以startActivity传送给操作系统
  9. context.startActivity(i);
  10. }
  11. }

后面 在manifest里面注册BroadcastReceiver

[java] view plain copy
  1. <receiverandroid:name=".StartupReceiver">
  2. <intent-filter>
  3. <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
  4. <categoryandroid:name="android.intent.category.HOME"/>
  5. </intent-filter>
  6. </receiver>

最后,再添加上权限就可以了


[java] view plain copy
  1. <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

一零三、Java对象赋值注意点

刚刚再看Think in Java 4的时候,提醒下自己!

对主数据类型的赋值是非常直接的。由于主类型容纳了实际的值,而且并非指向一个对象的句柄,所以在为其赋值的时候,可将来自一个地方的内容复制到另一个地方。例如,假设为主类型使用“A=B”,那么B处的内容就复制到A。若接着又修改了 A,那么 B 根本不会受这种修改的影响。作为一名程序员,这应成为自己的常识。
但在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C 和D最终都会指向最初只有 D 才指向的那个对象。下面这个例子将向大家阐示这一点。

把书中的例子稍微修改了下:

[java] view plain copy
  1. packagecn.demo;
  2. classNumber{
  3. inti;
  4. }
  5. publicclassAssignment{
  6. publicstaticvoidmain(String[]args){
  7. Numbern1=newNumber();
  8. Numbern2=newNumber();
  9. n1.i=9;
  10. n2.i=47;
  11. System.out.println("1:n1.i:"+n1.i+
  12. ",n2.i:"+n2.i);
  13. n1.i=n2.i;
  14. System.out.println("2:n1.i:"+n1.i+
  15. ",n2.i:"+n2.i);
  16. n1.i=32;
  17. System.out.println("3:n1.i:"+n1.i+
  18. ",n2.i:"+n2.i);
  19. n1=n2;
  20. System.out.println("4:n1.i:"+n1.i+
  21. ",n2.i:"+n2.i);
  22. n1.i=27;
  23. System.out.println("5:n1.i:"+n1.i+
  24. ",n2.i:"+n2.i);
  25. }
  26. }

打印结果:

1: n1.i: 9, n2.i: 47
2: n1.i: 47, n2.i: 47
3: n1.i: 32, n2.i: 47
4: n1.i: 47, n2.i: 47
5: n1.i: 27, n2.i: 27

一零四、Notification点击取消

notification.flags |= Notification.FLAG_AUTO_CANCEL;


一零五、保留表结构,删除表中所有内容

[html] view plain copy
  1. "DELETEFROM"+TABLE_NAME+"WHERE1=1"

一零六、Android手机获取手机唯一识别号


在开发手机应用时,开发者最关心的是开发的手机软件有多少用户安装,并且正在使用。这就需要识别手机的唯一性。目前我了解的有两种方法,获取手机的imei号(imei号是唯一识别手机的号码)。获取android id号(android id 是手机系统的唯一号码)。

  第一种方法:

  android获取手机imei号的方法在在android系统中获取imei号和其他手机信息一文中做了详细的介绍。其中android在 2.0以上的版本中,获取手机imei号已经不需要相应的读取手机信息的权限了。

  < uses-permission android:name="android.permission.READ_PHONE_STATE" />

  但是目前1.6以下的版本用户占用户的近50%,如果想要让1.6以下版本的用户也可以获取imei号,那就要添加权限。

  好处是唯一标识手机,缺点是可能需要相应的用户权限。


String myIMSI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);

String myIMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI);

  第二种方法:

  可以获取android id号,如果一个手机设备第一次启动随即产生的一个数字,如果系统改变,该号可能会改变。

  android id号解释:http://androidappdocs-staging.appspot.com/reference/android /provider/Settings.Secure.html#ANDROID_ID

  获取方法:

  String t=android.provider.Settings.System.getString(getContentResolver(), "android_id");

  Log.i("huilurry","android_id="+t);

  Ms测试结果:

  07-13 13:12:49.835: INFO/huilurry(17455): android_id=20014289e714f20c

  好处是所有版本都试用,缺点是可能会和其他机子重复或本机改变。via:http://wangjun.easymorse.com /?p=665

3、获取IMEI是把,telephonypackage的TelephonyManager类的getDeviceId() 方法


获得IMSI / IMEI(SIM和手机的唯一识别ID)

  学习内容: 你将学到如何读出你手机里的SIM卡的IMSI (国际移动用户ID) 和IMEI (国际移动设备ID). IMSI 与 SIM唯一对应, IMEI 与 设备唯一对应.

  可能应用的场合: 你可能需要 唯一的id 去授权/注册,或者用于你的Android-Activity的license目的 下面的两行代码将会使你获得SIM卡唯一 ID IMSI 和设备唯一ID IMEI

  描述:
  IMSI是一个 唯一的数字, 标识了GSM和UMTS 网络里的唯一一个用户. 它 存储 在手机的SIM卡里,它会通过手机发送到网络上.

  IMEI也是一串唯一的数字, 标识了 GSM 和 UMTS网络里的唯一一个手机. 它通常被打印在手机里电池下面的那一面,拨*#06# 也能看到它.

  代码: 这里是你在Android里读出 唯一的 IMSI-ID / IMEI-ID 的方法。
Java:
String myIMSI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);

String myIMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI);


一零七、静默卸载系统软件和第三方软件

[java] view plain copy
  1. 一个个卸载软件,弹出卸载软件提示好麻烦,现在特作出下列方法,可以静默卸载
  2. 静默安装敬请期待。。。。
  3. //下面3句是静默卸载系统软件命令
  4. Stringbusybox="mount-oremountrw/system";
  5. Stringchmod="chmod777/system/app/HtcTwitter.apk";
  6. uninstallapk="rm-r/system/app/HtcTwitter.apk";
  7. //下面3句是静默卸载第三方软件命令
  8. Stringbusybox1="mount-oremountrw/data";
  9. Stringchmod1="chmod777/data/app/com.yingyonghui.market-2.apk";
  10. uninstallapk1="pmuninstallcom.yingyonghui.market";
  11. chmodApk(busybox1,chmod1);
  12. /*
  13. *对要卸载的apk赋予权限
  14. */
  15. publicvoidchmodApk(Stringbusybox,Stringchmod)
  16. {
  17. try{
  18. Processprocess=null;
  19. DataOutputStreamos=null;
  20. process=Runtime.getRuntime().exec("su");
  21. os=newDataOutputStream(process.getOutputStream());
  22. os.writeBytes(busybox);
  23. os.flush();
  24. os.writeBytes(chmod);
  25. os.flush();
  26. os.close();
  27. }catch(Exceptionex){
  28. ex.printStackTrace();
  29. }
  30. }
  31. /*
  32. *卸载apk
  33. */
  34. publicvoiduninstallApk(Stringuninstallapk)
  35. {
  36. try{
  37. Processprocess=null;
  38. DataOutputStreamos=null;
  39. process=Runtime.getRuntime().exec("su");
  40. os=newDataOutputStream(process.getOutputStream());
  41. os.writeBytes(uninstallapk);
  42. os.flush();
  43. os.close();
  44. }catch(Exceptionex){
  45. ex.printStackTrace();
  46. }
  47. }


一零八、获取当前显示的activity

用ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。
仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。
getRunningTasks有个整型参数,表示返回列表的最大个数。那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。


[java] view plain copy
  1. ActivityManageram=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
  2. ComponentNamecn=am.getRunningTasks(1).get(0).topActivity;
  3. Log.d("","pkg:"+cn.getPackageName());
  4. Log.d("","cls:"+cn.getClassName());


一零九、android代码实现ViewPager的indictor效果


一一零、Android 手绘 - 支持保存为图片


一一一、android 遮罩层效果


一一二、Android中从SD卡中/拍照选择图片并进行剪裁的方法


一一三、 android 复制功能实现
[java] view plain copy
  1. /**
  2. *实现文本复制功能
  3. *@paramcontent要复制的内容
  4. */
  5. publicstaticvoidcopy(Stringcontent,Contextcontext){
  6. //得到剪贴板管理器
  7. ClipboardManagercmb=(ClipboardManager)context
  8. .getSystemService(Context.CLIPBOARD_SERVICE);
  9. cmb.setText(content.trim());
  10. }


一一四、 给图片加水印 [html] view plain copy
  1. try{
  2. ImageViewimg=(ImageView)findViewById(R.id.test_img_file);
  3. //获取从本地获取的文件路径,用FileInputstream读入文件,并将图片文件转换成位图
  4. Bundlebundle=getIntent().getExtras();
  5. Stringpath=bundle.getString("test");
  6. FileInputStreamfa=newFileInputStream(path);
  7. Bitmapbm=BitmapFactory.decodeStream(fa);//原图
  8. Bitmapwm=BitmapFactory.decodeResource(getResources(),R.drawable.wate_market);//水印
  9. //将creatBitmap()方法的返回值(返回位图)放到图片控件显示
  10. img.setImageBitmap(createBitMap(bm,wm));
  11. }catch(IOExceptione){
  12. e.printStackTrace();
  13. }
  14. }
  15. });
  16. }
  17. privateBitmapcreateBitMap(Bitmapsrc,Bitmapwmsrc){
  18. /**
  19. *水印制作方法
  20. */
  21. Stringtag="xx";
  22. Log.d(tag,"开始了,画图");
  23. if(src==null){
  24. returnnull;
  25. }
  26. intw=src.getWidth();
  27. inth=src.getHeight();
  28. intwmw=wmsrc.getWidth();
  29. intwmh=wmsrc.getHeight();
  30. //createthenewbitmap
  31. Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个底图
  32. Canvascv=newCanvas(newb);
  33. //将底图画进去
  34. cv.drawBitmap(src,0,0,null);//在0,0坐标开始画入src
  35. //讲水印画进去
  36. cv.drawBitmap(wmsrc,w-wmw+5,h-wmh+5,null);
  37. //保存图片
  38. cv.save(Canvas.ALL_SAVE_FLAG);
  39. cv.restore();
  40. returnnewb;
  41. }
  42. }


一一五、DialogFragment设置透明
在onCreatview里面加上: [html] view plain copy
  1. getDialog().getWindow().setBackgroundDrawable(new
  2. ColorDrawable(Color.TRANSPARENT));

更多相关文章

  1. Android获取手机和应用的相关信息
  2. Android--第一行代码笔记(2)
  3. Android中的Button自定义点击效果实例代码
  4. Android 之 ImageSwitch图片转换器
  5. Edittext设置输入属性,包括使用代码设置
  6. Android build.gradle文件详解(转述自《Android第一行代码》第二
  7. Android下图片或按钮等可拖动到任意位置的效果实现源码
  8. android的开发 华为手机上不显示menu键
  9. android全屏设置代码:

随机推荐

  1. 【Android】The application has stopped
  2. Android(安卓)中的各种控件
  3. Win7+Eclipse下Android开发环境配置
  4. android 音频系统java部分代码阅读
  5. 从NDK在非Root手机上的调试原理探讨Andro
  6. Android(安卓)2.2 API demo
  7. Android— Eclipse运行Emulator时提示权
  8. Android(安卓)Java和JavaScript代码相互
  9. android中使用Intent在activity之间传递
  10. Android(安卓)WebView与Javascript交互