Android有用代码片断(六) .

[+]
  1. Android有用代码片段五这五篇今天开始第六篇的整理这里解释一下因为一二三都是每个有20个片段但是在四中由于第70个代码过长所以在第四篇中只有10个片段 第五篇里面有25个
  2. 如果这篇文章对您有用劳烦几秒钟帮忙投下票httpvoteblogcsdnnetitemblogstaraomandeshangxiaoCsdn 2012博客之星投票谢谢
  3. 九十六javautilMissingFormatArgumentException 错误
  4. 九十七Android判断是Pad或者手机
  5. 九十八判断android网络状态
  6. 九十九ImageView的ScaleType属性
  7. 一百垂直进度条
  8. 一零一android获取本机Ip地址
  9. 一零二开机启动
  10. 一零三Java对象赋值注意点
  11. 一零四Notification点击取消
  12. 一零五保留表结构删除表中所有内容
  13. 一零六Android手机获取手机唯一识别号
  14. 一零七静默卸载系统软件和第三方软件
  15. 一零八获取当前显示的activity
  16. 一零九android代码实现ViewPager的indictor效果
  17. 一一零Android 手绘 - 支持保存为图片
  18. 一一一android 遮罩层效果
  19. 一一二Android中从SD卡中拍照选择图片并进行剪裁的方法

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

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


 

如果这篇文章对您有用,劳烦几秒钟帮忙投下票:http://vote.blog.youkuaiyun.com/item/blogstar/aomandeshangxiao,Csdn 2012博客之星投票,谢谢!!!     


九十六、java.util.MissingFormatArgumentException 错误

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

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

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


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

  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.     }  
public boolean isTabletDevice() {
        TelephonyManager telephony = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
        int type = telephony.getPhoneType();
        if (type == TelephonyManager.PHONE_TYPE_NONE) {
            return true;
        } else {
            return false;
        }
    }

九十八、判断android网络状态

  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.             }  
State mWifiState = null;
            State mMobileState = null;
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            mWifiState = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
            mMobileState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                    .getState();
            if (mWifiState != null && mMobileState != null && State.CONNECTED != mWifiState
                    && State.CONNECTED == mMobileState) {
                // 手机网络连接成功
            } else if (mWifiState != null && mMobileState != null && State.CONNECTED != mWifiState && State.CONNECTED != mMobileState) {
                mHandler.sendEmptyMessage(MSG_SHOW_NET_DIALOG);
            } else if (mWifiState != null && State.CONNECTED == mWifiState) {
                // 无线网络连接成功
                
            }


九十九、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地址


  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.     }    
public String getLocalIpAddress() {  
        try {  
            for (Enumeration<NetworkInterface> en = NetworkInterface  
                    .getNetworkInterfaces(); en.hasMoreElements();) {  
                NetworkInterface intf = en.nextElement();  
                for (Enumeration<InetAddress> enumIpAddr = intf  
                        .getInetAddresses(); enumIpAddr.hasMoreElements();) {  
                    InetAddress inetAddress = enumIpAddr.nextElement();  
                    if (!inetAddress.isLoopbackAddress()) {  
                        return inetAddress.getHostAddress().toString();  
                    }  
                }  
            }  
        } catch (SocketException ex) {  
            Log.e("WifiPreference IpAddress", ex.toString());  
        }  
        return null;  
    }  

别忘了加权限:

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


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

  1. if (!inetAddress.isLoopbackAddress()&& InetAddressUtils  
  2.                             .isIPv4Address(inetAddress  
  3.                             .getHostAddress().toString())) {   
if (!inetAddress.isLoopbackAddress()&& InetAddressUtils
                    		.isIPv4Address(inetAddress
                    		.getHostAddress().toString())) { 

一零二、开机启动

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

  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. }  
public class StartupReceiver extends BroadcastReceiver {


	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
                //xxx 你要跳转到的activity		
                Intent i = new Intent(context,xxx.class);
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		//将intent以startActivity传送给操作系统
		context.startActivity(i);


	}


}

后面 在manifest里面注册BroadcastReceiver

  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>   
<receiver android:name=".StartupReceiver">  
            <intent-filter>  
                <action android:name="android.intent.action.BOOT_COMPLETED" />  
                <category android:name="android.intent.category.HOME" />  
            </intent-filter>  
        </receiver> 

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


  1. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>  
<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 才指向的那个对象。下面这个例子将向大家阐示这一点。 

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

  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. }  
package cn.demo;
class Number { 
  int i; 
} 
 
public class Assignment { 
  public static void main(String[] args) { 
    Number n1 = new Number(); 
    Number n2 = new Number(); 
    n1.i = 9; 
    n2.i = 47; 
    System.out.println("1: n1.i: " + n1.i + 
      ", n2.i: " + n2.i); 

    n1.i = n2.i;
    System.out.println("2: n1.i: " + n1.i + 
    	      ", n2.i: " + n2.i); 
    n1.i = 32;
    System.out.println("3: n1.i: " + n1.i + 
    	      ", n2.i: " + n2.i); 
    n1 = n2; 
    System.out.println("4: n1.i: " + n1.i + 
      ", n2.i: " + n2.i); 
    n1.i = 27; 
    System.out.println("5: n1.i: " + n1.i + 
      ", n2.i: " + n2.i); 
  } 
}

打印结果:

 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;


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

  1. "DELETE FROM " + TABLE_NAME + " WHERE 1 = 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);


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

  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.     }  
一个个卸载软件,弹出卸载软件提示好麻烦,现在特作出下列方法,可以静默卸载

静默安装敬请期待。。。。



          //下面3句是静默卸载系统软件命令
            String busybox="mount -o remount rw /system";
         String chmod="chmod 777 /system/app/HtcTwitter.apk";
         uninstallapk="rm -r /system/app/HtcTwitter.apk";
         
         //下面3句是静默卸载第三方软件命令
         String busybox1="mount -o remount rw /data";
         String chmod1="chmod 777 /data/app/com.yingyonghui.market-2.apk";
         uninstallapk1="pm uninstall com.yingyonghui.market";
         
         chmodApk(busybox1,chmod1);







  /*
     * 对要卸载的apk赋予权限
     */
    public void chmodApk(String busybox ,String chmod)
    {
     try {
     
       Process process = null;
   DataOutputStream os = null;

   process = Runtime.getRuntime().exec("su");
   os = new DataOutputStream(process.getOutputStream());
   os.writeBytes(busybox);
        os.flush();
        
        os.writeBytes(chmod);
        os.flush();
        
        os.close();
       } catch (Exception ex) {
           ex.printStackTrace();
       }
    }
    
    
    /*
     * 卸载apk
     */
    public void uninstallApk(String uninstallapk)
    {
     try {
         
       Process process = null;
   DataOutputStream os = null;
   process = Runtime.getRuntime().exec("su");
   os = new DataOutputStream(process.getOutputStream());
        os.writeBytes(uninstallapk);
        os.flush();
        
        os.close();
       } catch (Exception ex) {
           ex.printStackTrace();
       }
    }


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

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


  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());  
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
Log.d("", "pkg:"+cn.getPackageName());
Log.d("", "cls:"+cn.getClassName());


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


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


一一一、android 遮罩层效果


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

如果这篇文章对您有用,劳烦几秒钟帮忙投下票:http://vote.blog.youkuaiyun.com/item/blogstar/aomandeshangxiao,Csdn 2012博客之星投票,谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值