常用android代码片段

来源:互联网 发布:spss卡方检验数据输入 编辑:程序博客网 时间:2024/05/21 15:47

保存恢复ListView当前位置:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. private void saveCurrentPosition() {  
  2.         if (mListView != null) {  
  3.             int position = mListView.getFirstVisiblePosition();  
  4.             View v = mListView.getChildAt(0);  
  5.             int top = (v == null) ? 0 : v.getTop();  
  6.             //保存position和top  
  7.         }  
  8.     }  
  9.       
  10.     private void restorePosition() {  
  11.         if (mFolder != null && mListView != null) {  
  12.             int position = 0;//取出保存的数据  
  13.             int top = 0;//取出保存的数据  
  14.             mListView.setSelectionFromTop(position, top);  
  15.         }  
  16.     }  

检测字符串中是否包含汉字:


[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public static boolean checkChinese(String sequence) {  
  2.         final String format = "[\\u4E00-\\u9FA5\\uF900-\\uFA2D]";  
  3.         boolean result = false;  
  4.         Pattern pattern = Pattern.compile(format);  
  5.         Matcher matcher = pattern.matcher(sequence);  
  6.         result = matcher.find();  
  7.         return result;  
  8.     }  

解决Android AVD的方向键DPAD不能用的问题
解决方式如下 :
找到C:\Documents and Settings\Administrator\.android\avd\avd2.avd下的config.ini文件。
修改dpad的no为yes重启即可。


Android 结束进程,关闭程序的方法
android.os.Process.killProcess(pid)只能终止本程序的进程,无法终止其它的

在android2.2版本之后则不能再使用restartPackage()方法,而应该使用killBackgroundProcesses()方法 
manager.killBackgroundProcesses(getPackageName()); 
ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);       
manager.killBackgroundProcesses(getPackageName());   
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>  

还有一种最新发现的方法,利用反射调用forceStopPackage来结束进程
Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);  
forceStopPackage.setAccessible(true);  
forceStopPackage.invoke(am, yourpkgname); 

android:sharedUserId="android.uid.system"  
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
因为需要用FORCE_STOP_PACKAGES权限,该权限只赋予系统签名级程序


生成程序性能日志:

性能日志:
    if (PROFILE_STARTUP) {  
         android.os.Debug.startMethodTracing(  
                 Environment.getDataDirectory() + "/debug/log");  
     }  
     if (PROFILE_STARTUP) {  
         android.os.Debug.stopMethodTracing();  
     }  
把launcher.trace文件通过DDMS pull到电脑上,在SDK的tools目录里,执行traceview工具来打开launcher.trace 即可看到内容


通过反射机制获取通知栏高度

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public static int getStatusBarHeight(Context context){  
  2.         Class<?> c = null;  
  3.         Object obj = null;  
  4.         Field field = null;  
  5.         int x = 0, statusBarHeight = 0;  
  6.         try {  
  7.             c = Class.forName("com.android.internal.R$dimen");  
  8.             obj = c.newInstance();  
  9.             field = c.getField("status_bar_height");  
  10.             x = Integer.parseInt(field.get(obj).toString());  
  11.             statusBarHeight = context.getResources().getDimensionPixelSize(x);  
  12.         } catch (Exception e1) {  
  13.             e1.printStackTrace();  
  14.         }  
  15.         return statusBarHeight;  
  16.     }  

自定义view绘制文本计算文本宽度高度:

 private Rect mBounds = new Rect(); 

[java] view plaincopy
  1. String text = String.valueOf(mCount);    
  2.        mPaint.getTextBounds(text, 0, text.length(), mBounds);    
  3.        float textWidth = mBounds.width();    
  4.        float textHeight = mBounds.height();    
  5.        canvas.drawText(text, getWidth() / 2 - textWidth / 2, getHeight() / 2    
  6.                + textHeight / 2, mPaint);    



获取异常信息:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public void getInfo(){    
  2.        String location="";    
  3.        StackTraceElement[] stacks = Thread.currentThread().getStackTrace();     
  4.        location = "类名:"+stacks[2].getClassName() + "\n函数名:" + stacks[2].getMethodName()    
  5.        + "\n文件名:" + stacks[2].getFileName() + "\n行号:"    
  6.        + stacks[2].getLineNumber() + "";    
  7.        System.out.println(location);    
  8.    }    

launcher 配置:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <intent-filter>   
  2.       <action android:name="android.intent.action.MAIN" />   
  3.       <category android:name="android.intent.category.HOME_FIRST" />   
  4.       <category android:name="android.intent.category.DEFAULT" />   
  5.       <category android:name="android.intent.category.MONKEY" />   
  6.    </intent-filter>   


android 4.0以后home按键监听方法(观察者模式实现);

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Home键监听封装  
  3.  *   
  4.  * @author way  
  5.  *   
  6.  */    
  7. public class HomeWatcher {    
  8.     
  9.     static final String TAG = "HomeWatcher";    
  10.     private Context mContext;    
  11.     private IntentFilter mFilter;    
  12.     private OnHomePressedListener mListener;    
  13.     private InnerRecevier mRecevier;    
  14.     
  15.     // 回调接口    
  16.     public interface OnHomePressedListener {    
  17.         public void onHomePressed();    
  18.     
  19.         public void onHomeLongPressed();    
  20.     }    
  21.     
  22.     public HomeWatcher(Context context) {    
  23.         mContext = context;    
  24.         mRecevier = new InnerRecevier();    
  25.         mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);    
  26.     }    
  27.     
  28.     /**  
  29.      * 设置监听  
  30.      *   
  31.      * @param listener  
  32.      */    
  33.     public void setOnHomePressedListener(OnHomePressedListener listener) {    
  34.         mListener = listener;    
  35.     }    
  36.     
  37.     /**  
  38.      * 开始监听,注册广播  
  39.      */    
  40.     public void startWatch() {    
  41.         if (mRecevier != null) {    
  42.             mContext.registerReceiver(mRecevier, mFilter);    
  43.         }    
  44.     }    
  45.     
  46.     /**  
  47.      * 停止监听,注销广播  
  48.      */    
  49.     public void stopWatch() {    
  50.         if (mRecevier != null) {    
  51.             mContext.unregisterReceiver(mRecevier);    
  52.         }    
  53.     }    
  54.     
  55.     /**  
  56.      * 广播接收者  
  57.      */    
  58.     class InnerRecevier extends BroadcastReceiver {    
  59.         final String SYSTEM_DIALOG_REASON_KEY = "reason";    
  60.         final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";    
  61.         final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";    
  62.         final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";    
  63.     
  64.         @Override    
  65.         public void onReceive(Context context, Intent intent) {    
  66.             String action = intent.getAction();    
  67.             if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {    
  68.                 String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);    
  69.                 if (reason != null) {    
  70.                     L.i(TAG, "action:" + action + ",reason:" + reason);    
  71.                     if (mListener != null) {    
  72.                         if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {    
  73.                             // 短按home键    
  74.                             mListener.onHomePressed();    
  75.                         } else if (reason    
  76.                                 .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {    
  77.                             // 长按home键    
  78.                             mListener.onHomeLongPressed();    
  79.                         }    
  80.                     }    
  81.                 }    
  82.             }    
  83.         }    
  84.     }    
  85. }    

在对应Activity中实现OnHomePressedListener 接口并注册监听即可:


[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. protected void onResume() {    
  2.     // TODO Auto-generated method stub    
  3.     mHomeWatcher = new HomeWatcher(this);    
  4.     mHomeWatcher.setOnHomePressedListener(this);    
  5.     mHomeWatcher.startWatch();    
  6.     super.onResume();    
  7. }    
  8.   
  9. protected void onPause() {    
  10.     // TODO Auto-generated method stub    
  11.     super.onPause();    
  12.     mHomeWatcher.setOnHomePressedListener(null);    
  13.     mHomeWatcher.stopWatch();    
  14. }    


判断前置摄像,后置摄像是否存在;

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /** 
  2.      * 获取前置摄像头 
  3.      * @return 
  4.      */  
  5.     @TargetApi(9)    
  6.     private int FindFrontCamera(){    
  7.         int cameraCount = 0;    
  8.         Camera.CameraInfo cameraInfo = new Camera.CameraInfo();    
  9.         cameraCount = Camera.getNumberOfCameras(); // get cameras number    
  10.                   
  11.         for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {    
  12.             Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo    
  13.             if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT ) {     
  14.                 // 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置    
  15.                return camIdx;    
  16.             }    
  17.         }    
  18.         return -1;    
  19.     }    
  20.     /** 
  21.      * 获取后置摄像头 
  22.      * @return 
  23.      */  
  24.     @TargetApi(9)    
  25.     private int FindBackCamera(){    
  26.         int cameraCount = 0;    
  27.         Camera.CameraInfo cameraInfo = new Camera.CameraInfo();    
  28.         cameraCount = Camera.getNumberOfCameras(); // get cameras number    
  29.                   
  30.         for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {    
  31.             Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo    
  32.             if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_BACK ) {     
  33.                 // 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置    
  34.                return camIdx;    
  35.             }    
  36.         }    
  37.         return -1;    
  38.     }    

开启摄像头:

int CammeraIndex=FindBackCamera();  
       if(CammeraIndex==-1){  
           CammeraIndex=FindFrontCamera();  
       }  
       mServiceCamera = Camera.open(CammeraIndex); 


java 线程池简单使用案例:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class ThreadPool {  
  2.     private AtomicBoolean mStopped = new AtomicBoolean(Boolean.FALSE);  
  3.     private ThreadPoolExecutor mQueue;  
  4.   
  5.     public ThreadPool() {  
  6.         mQueue = new ThreadPoolExecutor(101060, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), sThreadFactory);  
  7.         mQueue.allowCoreThreadTimeOut(true);  
  8.     }  
  9.   
  10.     public void start(Runnable run) {  
  11.         mQueue.execute(run);  
  12.     }  
  13.   
  14.     public void stop() {  
  15.         if (!mStopped.get()) {  
  16.             mQueue.shutdownNow();  
  17.             mStopped.set(Boolean.TRUE);  
  18.         }  
  19.     }  
  20.   
  21.     private static final ThreadFactory sThreadFactory = new ThreadFactory() {  
  22.         private final AtomicInteger mCount = new AtomicInteger(1);  
  23.   
  24.         @Override  
  25.         public Thread newThread(Runnable r) {  
  26.             return new Thread(r, "ThreadPool #" + mCount.getAndIncrement());  
  27.         }  
  28.     };  
  29. }  
  30.   
  31. protected ExecutorService executorService;// 线程池  
  32.     private final int POOL_SIZE = 20;// 单个CPU线程池大小  
  33.     executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);  
  34.     executorService.execute(client(runnable));  
  35.     executorService.shutdown();  
  36.   
  37. newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。  
  38. newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。  
  39. newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。  
  40. newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。  
  41. newSingleThreadExecutor:创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求。  


android的帮助、about、关于作者、HELP等的提示页面

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 方法一:  
  2.  AlertDialog ad = new AlertDialog.Builder(SettingPreference.this)  
  3.                             .setTitle(R.string.about_dlg_title)  
  4.                             .setMessage(R.string.about_dlg_message)  
  5.                             .setPositiveButton(getText(R.string.ok), null).create();  
  6.                     ad.show();  
  7.                     //加入链接功能  
  8.                     Linkify.addLinks((TextView) ad.findViewById(android.R.id.message),  
  9.                             Linkify.ALL);  
  10.   
  11. 方法二:  
  12. 设计一个AboutDialog类继承于AlertDialog  
  13. public class AboutDialog extends AlertDialog {     
  14.     public AboutDialog(Context context) {     
  15.         super(context);     
  16.         final View view = getLayoutInflater().inflate(R.layout.about,     
  17.                 null);     
  18.         setButton(context.getText(R.string.close), (OnClickListener) null);     
  19.         setIcon(R.drawable.icon_about);     
  20.         setTitle("程序版本   v1.0.0" );     
  21.         setView(view);     
  22.     }     
  23.   
  24. 布局文件about.xml  
  25. <?xml version="1.0" encoding="utf-8"?>    
  26. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  27.     android:layout_width="fill_parent" android:layout_height="wrap_content">    
  28.     <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"   
  29.         android:layout_width="fill_parent" android:layout_height="fill_parent">    
  30.      
  31.         <TextView android:layout_height="fill_parent"   
  32.             android:layout_width="fill_parent" android:text="@string/help_dialog_text"   
  33.             android:padding="6dip" android:textColor="#FFFFFF" />    
  34.     </ScrollView>    
  35. </FrameLayout>    


webView 实现在线解析文档功能(支持office文档,pdf文档,常见文档,存档文件类型(.ZIP 和 .RAR))

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. private class HelloWebViewClient extends WebViewClient   
  2.     {  
  3.         @Override  
  4.         public boolean shouldOverrideUrlLoading(WebView view, String url)  
  5.         {  
  6.             String googleDocs = "https://docs.google.com/viewer?url=";   
  7.               
  8.             if (url.endsWith(".pdf"))  
  9.             {  
  10.                 // Load "url" in google docs  
  11.                 mWebView.loadUrl(googleDocs + url);  
  12.             }  
  13.             else  
  14.             {  
  15.                 // Load all other urls normally.  
  16.                 view.loadUrl(url);  
  17.             }  
  18.   
  19.             return true;  
  20.         }  
  21.     }  

程序崩溃时,重启应用:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. //重新配置appliacation  
  2.  <application  
  3.         android:allowBackup="true"  
  4.         android:name="com.pioneersoft.aoc.crashexception.CrashApplication"  
  5.         android:icon="@drawable/icon"  
  6.         android:theme="@android:style/Theme.NoTitleBar"  
  7.         android:label="@string/app_name" >  
  8.   
  9. public class CrashApplication extends Application {  
  10.   
  11.     private PendingIntent restartIntent;  
  12.       
  13.     @Override  
  14.     public void onCreate() {  
  15.         super.onCreate();  
  16.           
  17.          // 以下用来捕获程序崩溃异常    
  18.         Intent intent = new Intent();    
  19.         // 参数1:包名,参数2:程序入口的activity    
  20.         intent.setClassName(getPackageName(), "com.pioneersoft.aoc.ui.MainActivity");    
  21.         restartIntent = PendingIntent.getActivity(getApplicationContext(), 0,    
  22.                 intent, Intent.FLAG_ACTIVITY_NEW_TASK);    
  23.         Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃时触发线程   
  24.     }  
  25.       
  26.     public UncaughtExceptionHandler restartHandler = new UncaughtExceptionHandler() {    
  27.         @Override    
  28.         public void uncaughtException(Thread thread, Throwable ex) {   
  29.               
  30.             AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);    
  31.             mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 5000,    
  32.                     restartIntent); // 1秒钟后重启应用    
  33.             Log.e("crash""intent restart!");  
  34.             //退出程序   
  35.            android.os.Process.killProcess(android.os.Process.myPid());   
  36.         }    
  37.     };    


获取多个可用的存储设备

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public static String getExternalStorageDirectory() {  
  2.         //获取所以可用的存储路径  
  3.         Map<String, String> map = System.getenv();  
  4.         String[] values = new String[map.values().size()];  
  5.         map.values().toArray(values);  
  6.         String path = values[values.length - 1];  
  7.         //获取外置存储卡位置  
  8.         if (path.startsWith("/mnt/") && !Environment.getExternalStorageDirectory().getAbsolutePath().equals(path))  
  9.             return path;  
  10.         else  
  11.             return Environment.getExternalStorageDirectory().getAbsolutePath();  
  12.     }  

获取存储可用空间:

[java] view plaincopy
  1. private static final double KB = 1024.0;    
  2.         private static final double MB = KB * KB;    
  3.         private static final double GB = KB * KB * KB;    
  4.             
  5.         private static String showFileSize(double size) {    
  6.             String fileSize;    
  7.             if (size < KB)    
  8.                 fileSize = size + "B";    
  9.             else if (size < MB)    
  10.                 fileSize = String.format("%.3f", size / KB) + "KB";    
  11.             else if (size < GB)    
  12.                 fileSize = String.format("%.3f", size / MB) + "MB";    
  13.             else    
  14.                 fileSize = String.format("%.3f", size / GB) + "GB";    
  15.             
  16.             return fileSize;    
  17.         }    
  18.         /** 显示SD卡剩余空间 */    
  19.         public static String getSdcardAvailable() {    
  20.             String result = "";    
  21.             if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {    
  22.                 StatFs sf = new StatFs("/mnt/sdcard");    
  23.                 long blockSize = sf.getBlockSize();    
  24.                 long blockCount = sf.getBlockCount();    
  25.                 long availCount = sf.getAvailableBlocks();    
  26.                 return showFileSize(availCount * blockSize) + " \\ " + showFileSize(blockSize * blockCount);    
  27.             }    
  28.             return result;    
  29.         }    
  30.           
  31.         /** 
  32.          * 获取手机内部可用空间大小 
  33.          * @return 
  34.          */  
  35.         static public long getAvailableInternalMemorySize() {  
  36.             File path = Environment.getDataDirectory();  
  37.             StatFs stat = new StatFs(path.getPath());  
  38.             long blockSize = stat.getBlockSize();  
  39.             long availableBlocks = stat.getAvailableBlocks();  
  40.             return availableBlocks * blockSize;  
  41.         }  
  42.   
  43.         /** 
  44.          * 获取手机内部空间大小 
  45.          * @return 
  46.          */  
  47.         static public long getTotalInternalMemorySize() {  
  48.             File path = Environment.getDataDirectory();  
  49.             StatFs stat = new StatFs(path.getPath());  
  50.             long blockSize = stat.getBlockSize();  
  51.             long totalBlocks = stat.getBlockCount();  
  52.             return totalBlocks * blockSize;  
  53.         }  

获取内存使用情况:

[java] view plaincopy
  1. public static String getMemoryUsage() {  
  2.       ActivityManager activityManager = (ActivityManager) DscaApplication.AppContext.getSystemService(Context.ACTIVITY_SERVICE);  
  3.       MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();  
  4.       activityManager.getMemoryInfo(memoryInfo);  
  5.       long availMemory = memoryInfo.availMem / ONE_M_TO_BYTE;  
  6.       long totalMemory = memoryInfo.totalMem / ONE_M_TO_BYTE;  
  7.        
  8.       return availMemory + "M/" + totalMemory + "M";  
  9.   }  

模拟按键:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public static void simulateKey(final int KeyCode) {  
  2.   
  3.         new Thread() {  
  4.             @Override  
  5.             public void run() {  
  6.                 try {  
  7.                     Instrumentation inst = new Instrumentation();  
  8.                     inst.sendKeyDownUpSync(KeyCode);  
  9.                 } catch (Exception e) {  
  10.                     Log.e("Exception when sendKeyDownUpSync", e.toString());  
  11.                 }  
  12.             }  
  13.   
  14.         }.start();  
  15.     }  
  16.     @Override  
  17.     public boolean dispatchKeyEvent(KeyEvent event) {  
  18.         dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis()+100,  
  19.                 MotionEvent.ACTION_DOWN, 1001000));  
  20.         return super.dispatchKeyEvent(event);  
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean dispatchTouchEvent(MotionEvent ev) {  
  25.         dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));  
  26.         dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));  
  27.         dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));  
  28.         return super.dispatchTouchEvent(ev);  
  29.     }  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /**使用Linux shell命令模拟按键信息 
  2.      * run linuix shell cmmand  
  3.      * @param keyCode 
  4.      */  
  5.     private void runLinuixShell(final int keyCode){  
  6.         try{  
  7.             String keyCommand = "input keyevent " + keyCode;  
  8.             Runtime runtime = Runtime.getRuntime();  
  9.             Process proc=runtime.exec(keyCommand);  
  10.             Log.e("cmdrun","keycode= "+keyCode);  
  11.        //   proc.destroy();  
  12.         }catch (IOException e){  
  13.             Log.e("cmderror", e.toString());  
  14.         }  
  15.     }  


得到file的MIME类型:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. // url = file path or whatever suitable URL you want.  
  2. public static String getMimeType(String url)  
  3. {  
  4.     String type = null;  
  5.     String extension = MimeTypeMap.getFileExtensionFromUrl(url);  
  6.     if (extension != null) {  
  7.         MimeTypeMap mime = MimeTypeMap.getSingleton();  
  8.         type = mime.getMimeTypeFromExtension(extension);  
  9.     }  
  10.     return type;  
  11. }  


网络相关判断:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /** 
  2.      * Checks to see if we are connected to a local network, for instance wifi or ethernet 
  3.      *  
  4.      * @return true if connected to a local network 
  5.      */  
  6.     public static boolean isConnectedToLocalNetwork() {  
  7.         Context context = Globals.getContext();  
  8.         ConnectivityManager cm = (ConnectivityManager) context  
  9.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  10.         NetworkInfo ni = cm.getActiveNetworkInfo();  
  11.         // @TODO: this is only defined starting in api level 13  
  12.         final int TYPE_ETHERNET = 0x00000009;  
  13.         return ni != null && ni.isConnected() == true  
  14.                 && (ni.getType() & (ConnectivityManager.TYPE_WIFI | TYPE_ETHERNET)) != 0;  
  15.     }  
  16.   
  17.     /** 
  18.      * Checks to see if we are connected using wifi 
  19.      *  
  20.      * @return true if connected using wifi 
  21.      */  
  22.     public static boolean isConnectedUsingWifi() {  
  23.         Context context = Globals.getContext();  
  24.         ConnectivityManager cm = (ConnectivityManager) context  
  25.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  26.         NetworkInfo ni = cm.getActiveNetworkInfo();  
  27.         return ni != null && ni.isConnected() == true  
  28.                 && ni.getType() == ConnectivityManager.TYPE_WIFI;  
  29.     }  

设备唤醒,保持网络连接:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. WifiLock wifiLock = null;  
  2.     PowerManager.WakeLock wakeLock;  
  3.       
  4.      private void takeWakeLock() {  
  5.         if (wakeLock == null) {  
  6.             Log.d(TAG, "About to take wake lock");  
  7.             PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);  
  8.             // Many (all?) devices seem to not properly honor a  
  9.             // PARTIAL_WAKE_LOCK,  
  10.             // which should prevent CPU throttling. This has been  
  11.             // well-complained-about on android-developers.  
  12.             // For these devices, we have a config option to force the phone  
  13.             // into a  
  14.             // full wake lock.  
  15.             if (fullWake) {  
  16.                 Log.d(TAG, "Need to take full wake lock");  
  17.                 wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, WAKE_LOCK_TAG);  
  18.             } else {  
  19.                 wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG);  
  20.             }  
  21.             wakeLock.setReferenceCounted(false);  
  22.         }  
  23.         Log.d(TAG, "Acquiring wake lock");  
  24.         wakeLock.acquire();  
  25.     }  
  26.   
  27.     private void releaseWakeLock() {  
  28.         Log.d(TAG, "Releasing wake lock");  
  29.         if (wakeLock != null) {  
  30.             wakeLock.release();  
  31.             wakeLock = null;  
  32.             Log.d(TAG, "Finished releasing wake lock");  
  33.         } else {  
  34.             Log.e(TAG, "Couldn't release null wake lock");  
  35.         }  
  36.     }  
  37.   
  38.     private void takeWifiLock() {  
  39.         Log.d(TAG, "Taking wifi lock");  
  40.         if (wifiLock == null) {  
  41.             WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
  42.             wifiLock = manager.createWifiLock("SwiFTP");  
  43.             wifiLock.setReferenceCounted(false);  
  44.         }  
  45.         wifiLock.acquire();  
  46.     }  
  47.   
  48.     private void releaseWifiLock() {  
  49.         Log.d(TAG, "Releasing wifi lock");  
  50.         if (wifiLock != null) {  
  51.             wifiLock.release();  
  52.             wifiLock = null;  
  53.         }  
  54.     }  


日起比较:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public void compareToNowDate(Date date){  
  2.         Date nowdate=new Date();  
  3.         //format date pattern  
  4.         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  5.         //convert to millions seconds  
  6.         long time=DateToLong(StringToDate(formatter.format(nowdate)));  
  7.         long serverTime=DateToLong(date);  
  8.         //convert to seconds  
  9.         long minTime=Math.abs(time-serverTime)/1000;    Log.d(getLocalClassName(), "minTime= "+minTime);  
  10.     }  
  11.       
  12.     private long DateToLong(Date time){  
  13.         SimpleDateFormat st=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//yyyyMMddHHmmss  
  14.         return Long.parseLong(st.format(time));  
  15.     }  
  16.   
  17.     private Date StringToDate(String s){  
  18.         Date time=null;  
  19.         SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  20.         try {  
  21.             time=sd.parse(s);  
  22.         } catch (java.text.ParseException e) {  
  23.             System.out.println("输入的日期格式有误!");   
  24.             e.printStackTrace();  
  25.         }  
  26.         return time;  
  27.     }  
  28.       
1 0
原创粉丝点击