(转)Android有用代码片断(六)

         不知不觉中,就收集了超过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. public boolean isTabletDevice() {  
  2.         TelephonyManager telephony = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);  
  3.         int type = telephony.getPhoneType();  
  4.         if (type == TelephonyManager.PHONE_TYPE_NONE) {  
  5.             return true;  
  6.         } else {  
  7.             return false;  
  8.         }  
  9.     }  

九十八、判断android网络状态

[java]  view plain copy
  1. State mWifiState = null;  
  2.             State mMobileState = null;  
  3.             ConnectivityManager cm = (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.             } else if (mWifiState != null && mMobileState != null && State.CONNECTED != mWifiState && State.CONNECTED != mMobileState) {  
  11.                 mHandler.sendEmptyMessage(MSG_SHOW_NET_DIALOG);  
  12.             } else if (mWifiState != null && State.CONNECTED == mWifiState) {  
  13.                 // 无线网络连接成功  
  14.                   
  15.             }  


九十九、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.     protected synchronized void onDraw(Canvas canvas)  
  3.     {  
  4.         // TODO Auto-generated method stub  
  5.         canvas.rotate(-90);//反转90度,将水平ProgressBar竖起来  
  6.         canvas.translate(-getHeight(), 0);//将经过旋转后得到的VerticalProgressBar移到正确的位置,注意经旋转<span style="white-space:pre">                     </span>    后宽高值互换  
  7.         super.onDraw(canvas);  
  8.     }

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


[java]  view plain copy
  1. public String getLocalIpAddress() {    
  2.         try {    
  3.             for (Enumeration<NetworkInterface> en = NetworkInterface    
  4.                     .getNetworkInterfaces(); en.hasMoreElements();) {    
  5.                 NetworkInterface intf = en.nextElement();    
  6.                 for (Enumeration<InetAddress> enumIpAddr = intf    
  7.                         .getInetAddresses(); enumIpAddr.hasMoreElements();) {    
  8.                     InetAddress inetAddress = enumIpAddr.nextElement();    
  9.                     if (!inetAddress.isLoopbackAddress()) {    
  10.                         return inetAddress.getHostAddress().toString();    
  11.                     }    
  12.                 }    
  13.             }    
  14.         } catch (SocketException ex) {    
  15.             Log.e("WifiPreference IpAddress", ex.toString());    
  16.         }    
  17.         return null;    
  18.     }    

别忘了加权限:

  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  2. <uses-permission android: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. public class StartupReceiver extends BroadcastReceiver {  
  2.   
  3.   
  4.     @Override  
  5.     public void onReceive(Context context, Intent intent) {  
  6.         // TODO Auto-generated method stub  
  7.                 //xxx 你要跳转到的activity          
  8.                 Intent i = new Intent(context,xxx.class);  
  9.         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  10.         //将intent以startActivity传送给操作系统  
  11.         context.startActivity(i);  
  12.   
  13.   
  14.     }  
  15.   
  16.   
  17. }  

后面 在manifest里面注册BroadcastReceiver

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

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


[java]  view plain copy
  1. <uses-permission android: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. package cn.demo;  
  2. class Number {   
  3.   int i;   
  4. }   
  5.    
  6. public class Assignment {   
  7.   public static void main(String[] args) {   
  8.     Number n1 = new Number();   
  9.     Number n2 = new Number();   
  10.     n1.i = 9;   
  11.     n2.i = 47;   
  12.     System.out.println("1: n1.i: " + n1.i +   
  13.       ", n2.i: " + n2.i);   
  14.   
  15.     n1.i = n2.i;  
  16.     System.out.println("2: n1.i: " + n1.i +   
  17.               ", n2.i: " + n2.i);   
  18.     n1.i = 32;  
  19.     System.out.println("3: n1.i: " + n1.i +   
  20.               ", n2.i: " + n2.i);   
  21.     n1 = n2;   
  22.     System.out.println("4: n1.i: " + n1.i +   
  23.       ", n2.i: " + n2.i);   
  24.     n1.i = 27;   
  25.     System.out.println("5: n1.i: " + n1.i +   
  26.       ", n2.i: " + n2.i);   
  27.   }   
  28. }  

打印结果:

 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. "DELETE FROM " + TABLE_NAME + " WHERE 1 = 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. 静默安装敬请期待。。。。  
  4.   
  5.   
  6.   
  7.           //下面3句是静默卸载系统软件命令  
  8.             String busybox="mount -o remount rw /system";  
  9.          String chmod="chmod 777 /system/app/HtcTwitter.apk";  
  10.          uninstallapk="rm -r /system/app/HtcTwitter.apk";  
  11.            
  12.          //下面3句是静默卸载第三方软件命令  
  13.          String busybox1="mount -o remount rw /data";  
  14.          String chmod1="chmod 777 /data/app/com.yingyonghui.market-2.apk";  
  15.          uninstallapk1="pm uninstall com.yingyonghui.market";  
  16.            
  17.          chmodApk(busybox1,chmod1);  
  18.   
  19.   
  20.   
  21.   
  22.   
  23.   
  24.   
  25.   /* 
  26.      * 对要卸载的apk赋予权限 
  27.      */  
  28.     public void chmodApk(String busybox ,String chmod)  
  29.     {  
  30.      try {  
  31.        
  32.        Process process = null;  
  33.    DataOutputStream os = null;  
  34.   
  35.    process = Runtime.getRuntime().exec("su");  
  36.    os = new DataOutputStream(process.getOutputStream());  
  37.    os.writeBytes(busybox);  
  38.         os.flush();  
  39.           
  40.         os.writeBytes(chmod);  
  41.         os.flush();  
  42.           
  43.         os.close();  
  44.        } catch (Exception ex) {  
  45.            ex.printStackTrace();  
  46.        }  
  47.     }  
  48.       
  49.       
  50.     /* 
  51.      * 卸载apk 
  52.      */  
  53.     public void uninstallApk(String uninstallapk)  
  54.     {  
  55.      try {  
  56.            
  57.        Process process = null;  
  58.    DataOutputStream os = null;  
  59.    process = Runtime.getRuntime().exec("su");  
  60.    os = new DataOutputStream(process.getOutputStream());  
  61.         os.writeBytes(uninstallapk);  
  62.         os.flush();  
  63.           
  64.         os.close();  
  65.        } catch (Exception ex) {  
  66.            ex.printStackTrace();  
  67.        }  
  68.     }  


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

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


[java]  view plain copy
  1. ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  
  2. ComponentName cn = 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卡中/拍照选择图片并进行剪裁的方法



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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值