首页 > 技术文章 > android 学习笔记有用代码片段(1-2-3整合)

happyxiaoyu02 2013-09-03 13:08 原文


应用重启

方法1:
Intent mStartActivity = new Intent(this, MainActivity.class);
		int mPendingIntentId = 123456;
		PendingIntent mPendingIntent = PendingIntent.getActivity(this, mPendingIntentId,mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
		AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
		mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 5*1000, mPendingIntent);
		//System.exit(0);
		android.os.Process.killProcess(android.os.Process.myPid());
方法2:
 Intent i = getBaseContext().getPackageManager()  
	                .getLaunchIntentForPackage(getBaseContext().getPackageName());  
	        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);  
	        startActivity(i);


安全启动Activity:

void startActivitySafely(Intent intent) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(this, "not found activity", Toast.LENGTH_SHORT).show();
        } catch (SecurityException e) {
            Toast.makeText(this, "no permision start", Toast.LENGTH_SHORT).show();
            e(LOG_TAG, "Launcher does not have the permission to launch " + intent +
                    ". Make sure to create a MAIN intent-filter for the corresponding activity " +
                    "or use the exported attribute for this activity.", e);
        }
    }


判断应用是否后台状态:

private ActivityManager mActivityManager;
	private List<String> homeList;
	/** 
	 * 判断当前界面是否是桌面 
	 */  
	public boolean isHome(){  
		if(mActivityManager == null) {
			mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);  
		}
	    List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);  
	    return homeList.contains(rti.get(0).topActivity.getPackageName());  
	}
 	/** 
	 * 获得属于桌面的应用的应用包名称 
	 * @return 返回包含所有包名的字符串列表 
	 */
	private List<String> getHomeApps() {
		List<String> names = new ArrayList<String>();  
	    PackageManager packageManager = this.getPackageManager();  
	    // 属性  
	    Intent intent = new Intent(Intent.ACTION_MAIN);  
	    intent.addCategory(Intent.CATEGORY_HOME);  
	    List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,  
	            PackageManager.MATCH_DEFAULT_ONLY);  
	    for(ResolveInfo ri : resolveInfo) {  
	        names.add(ri.activityInfo.packageName);  
	    }
	    return names;  
	}

 
权限<uses-permission android:name="android.permission.GET_TASKS"/>

连续按两次back键退出程序

long waitTime = 2000;
	long touchTime = 0;
	
	@Override
	public void onBackPressed() {
		long currentTime = System.currentTimeMillis();
		if((currentTime-touchTime)>=waitTime) {
			Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
			touchTime = currentTime;
		}else {
			finish();
		}
	}

 
返回系统桌面:

ntent intent = new Intent(Intent.ACTION_MAIN); 
		        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 注意  
		        intent.addCategory(Intent.CATEGORY_HOME); 
		        startActivity(intent); 
Intent intent = new Intent(Intent.ACTION_MAIN);
    	intent.addCategory(Intent.CATEGORY_HOME);
    	intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);	//开辟新栈
    	intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//清空栈内程序
    	startActivity(intent);
    	//	finish();

 检查有没有应用程序来接受处理你发出的intent

public static boolean isIntentAvailable(Context context, String action) {
        final PackageManager packageManager = context.getPackageManager();
        final Intent intent = new Intent(action);
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }

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

public static boolean checkChinese(String sequence) {
        final String format = "[\\u4E00-\\u9FA5\\uF900-\\uFA2D]";
        boolean result = false;
        Pattern pattern = Pattern.compile(format);
        Matcher matcher = pattern.matcher(sequence);
        result = matcher.find();
        return result;
    }

 

图片压缩成流,byte数组

private static void toArray(Bitmap src, Bitmap.CompressFormat format, 
                                    int quality) { 
            ByteArrayOutputStream os = new ByteArrayOutputStream(); 
            src.compress(format, quality, os);            


            byte[] array = os.toByteArray(); 
         //   return BitmapFactory.decodeByteArray(array, 0, array.length); 
        } 

 

媒体库数据更新:

 public static void newFileNotify(String path) {
        if (Defaults.do_mediascanner_notify) {
            Log.d(TAG, "Notifying others about new file: " + path);
            new MediaScannerNotifier(Globals.getContext(), path);
        }
    }

    public static void deletedFileNotify(String path) {
        // This might not work, I couldn't find an API call for this.
        if (Defaults.do_mediascanner_notify) {
            Log.d(TAG, "Notifying others about deleted file: " + path);
            new MediaScannerNotifier(Globals.getContext(), path);
        }
    }

    // A class to help notify the Music Player and other media services when
    // a file has been uploaded.
    private static class MediaScannerNotifier implements MediaScannerConnectionClient {
        private final MediaScannerConnection connection;
        private final String path;

        public MediaScannerNotifier(Context context, String path) {
            this.path = path;
            connection = new MediaScannerConnection(context, this);
            connection.connect();
        }

        public void onMediaScannerConnected() {
            connection.scanFile(path, null); // null: we don't know MIME type
        }

        public void onScanCompleted(String path, Uri uri) {
            connection.disconnect();
        }
    }

或者
// Tell the media scanner about the new file so that it is
            // immediately available to the user.
            MediaScannerConnection.scanFile(this,
                    new String[] { file.toString() }, null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                }
            });

 

判断指定的服务是否运行:

public static boolean isServiceRunning(Context ctx, String serviceName, String processName) {
		ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
		for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
			if (serviceName.equals(service.service.getClassName()) && processName.equals(service.process))
				return true;
		}
		return false;
	}

 
判断指定进程是否正在运行:

public static boolean isProcessRunning(Context ctx, String name) {
		ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningAppProcessInfo> apps = am.getRunningAppProcesses();
		for (RunningAppProcessInfo app : apps) {
			if (app.processName.equals(name)) {
				return true;
			}
		}
		return false;
	}

 

 

开启移动网络

//打开或关闭GPRS   
    private boolean gprsEnabled(boolean bEnable)  
    {  
        Object[] argObjects = null;  
                  
        boolean isOpen = gprsIsOpenMethod("getMobileDataEnabled");  
        if(isOpen == !bEnable)  
        {  
            setGprsEnable("setMobileDataEnabled", bEnable);  
        }  
          
        return isOpen;    
    }  
      
    //检测GPRS是否打开   
    private boolean gprsIsOpenMethod(String methodName)  
    {  
        Class cmClass       = mCM.getClass();  
        Class[] argClasses  = null;  
        Object[] argObject  = null;  
          
        Boolean isOpen = false;  
        try  
        {  
            Method method = cmClass.getMethod(methodName, argClasses);  
  
            isOpen = (Boolean) method.invoke(mCM, argObject);  
        } catch (Exception e)  
        {  
            e.printStackTrace();  
        }  
  
        return isOpen;  
    }  
      
    //开启/关闭GPRS   
    private void setGprsEnabled(String methodName, boolean isEnable)  
    {  
        Class cmClass       = mCM.getClass();  
        Class[] argClasses  = new Class[1];  
        argClasses[0]       = boolean.class;  
          
        try  
        {  
            Method method = cmClass.getMethod(methodName, argClasses);  
            method.invoke(mCM, isEnable);  
        } catch (Exception e)  
        {  
            e.printStackTrace();  
        }  
    }  

 

 

AndroidManifest.xml里添加权限:

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



汉字转拼音:
搜素pinyin4j.jar 获取官网下载。添加至lib中

/**
 * 汉字转换为拼音
 * @author Administrator
 *
 */ 
public class HanZiToPinYinUtil {  
 
     public static String toPinYin(String str) {   
            String py = "";   
            String[] t = new String[str.length()];   
            char [] hanzi=new char[str.length()];   
            for(int i=0;i<str.length();i++){   
                hanzi[i]=str.charAt(i);   
            }   
               
            net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat t1 = new HanyuPinyinOutputFormat();   
            t1.setCaseType(HanyuPinyinCaseType.LOWERCASE);   
            t1.setToneType(HanyuPinyinToneType.WITHOUT_TONE);   
            t1.setVCharType(HanyuPinyinVCharType.WITH_V);   
               
            try {   
                for (int i = 0; i < str.length(); i++) {   
                    if ((str.charAt(i) >= 'a' && str.charAt(i) < 'z')   
                            || (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')   
                            || (str.charAt(i) >= '0' && str.charAt(i) <= '9')) {   
                        py += str.charAt(i);   
                    } else {   
                            t = PinyinHelper.toHanyuPinyinStringArray(hanzi[i], t1);   
                            py=py+t[0];   
                        }   
                    }   
            } catch (BadHanyuPinyinOutputFormatCombination e) {   
                e.printStackTrace();   
            }   
       
            return py.trim().toString();   
        } 

 


开启飞行模式:

boolean isEnabled = Settings.System.getInt(
                paramContext.getContentResolver(), 
                  Settings.System.AIRPLANE_MODE_ON, 0) == 1;
        if(isEnabled==true)
        {
            Settings.System.putInt(
                    paramContext.getContentResolver(),
                  Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

            // Post an intent to reload
            Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
            intent.putExtra("state", !isEnabled);
            paramContext.sendBroadcast(intent);
        }
        else
        {
            Settings.System.putInt(
                    paramContext.getContentResolver(),
                  Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

            // Post an intent to reload
            Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
            intent.putExtra("state", !isEnabled);
            paramContext.sendBroadcast(intent);
        }

 

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

 

开机自启动:(注意:app一定要安装到内存中,在sd卡上无法自启动)

<receiver android:name="com.pioneersoft.aoc.ui.BootBroadcastReceiver" android:enabled="true" android:exported="true">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>

 

public class BootBroadcastReceiver extends BroadcastReceiver {

//	static final String action_boot="android.intent.action.BOOT_COMPLETED";
	 
    @Override
    public void onReceive(Context context, Intent intent) {
 //       if (intent.getAction().equals(action_boot)){
            Intent bootStartIntent=new Intent(context,MainActivity.class);
            bootStartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(bootStartIntent);
//        }
 
    }
}

 

/** 获取未安装的APK信息  
     * @param context  
     * @param archiveFilePath APK文件的路径。如:/sdcard /download/XX.apk  
     */    
    public void getUninatllApkInfo(Context context, String archiveFilePath){    
        PackageManager pm = context.getPackageManager();    
        PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);    
        if(info != null){    
            ApplicationInfo appInfo = info.applicationInfo;    
            String appName = pm.getApplicationLabel(appInfo).toString();    
            String packageName = appInfo.packageName;    
            Drawable icon = pm.getApplicationIcon(appInfo);    
        }    
    }  


//监听apk安装,卸载,替换行为:
    public void registerApkChangeReceivers() {
        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        filter.addDataScheme("package");

        AppApplication.getAppContext().registerReceiver(mApplicationsReceiver, filter);
    }

    public void unregisterApkChangeReceivers(){
        AppApplication.getAppContext().unregisterReceiver(mApplicationsReceiver);
    }
    /**
     * Receives notifications when applications are added/removed.
     */
    ApplicationsIntentReceiver mApplicationsReceiver = new ApplicationsIntentReceiver();
    private class ApplicationsIntentReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //   PackageManager manager = context.getPackageManager();
            String action = intent.getAction();
            if(TextUtils.isEmpty(action)) return;
            String packageName = null;
            Uri uri = intent.getData();
            if(null!=uri) {
                packageName = uri.getSchemeSpecificPart();
            }

            if (action.equals(Intent.ACTION_PACKAGE_ADDED)) {
                Toast.makeText(context, "安装成功"+packageName, Toast.LENGTH_LONG).show();
            }
            else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
                Toast.makeText(context, "卸载成功"+packageName, Toast.LENGTH_LONG).show();
            }
            else if (action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
                Toast.makeText(context, "替换成功"+packageName, Toast.LENGTH_LONG).show();
            }
        }
    }

 

loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码。需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f 。
可以使用以下两种代码,data为string类型的html代码
1     webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html",  "utf-8");
这样一些背景效果什么的都不怎么好看了。不推荐。
2     webView.loadDataWithBaseURL(null,data, "text/html",  "utf-8", null);

/**
     * 安装app
     */
    public static void openAPK(File f, Context context) {
        context.startActivity(getInstallApp(f, context));
    }


    public static Intent getInstallApp(File f, Context context) {
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //设置应用的安装来源,例如谷歌市场
        intent.putExtra("android.intent.extra.INSTALLER_PACKAGE_NAME", context.getPackageName());
        intent.setAction(android.content.Intent.ACTION_VIEW);


        /* 设置intent的file */
        intent.setDataAndType(Uri.fromFile(f), "application/vnd.android.package-archive");
        return intent;
    }
    /**
     * 卸载APP
     * @param context
     * @param packageName
     */
    public static void uninstallApp(Context context,String packageName) {
        Uri packageURI = Uri.parse("package:" + packageName);   
        Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);   
        uninstallIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(uninstallIntent);
    }

 

Android屏幕解锁和锁定
  //屏幕解锁
  KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
  KeyguardLock keyguardLock = keyguardManager.newKeyguardLock(LOCK_TAG);
  keyguardLock.disableKeyguard();


  //屏幕锁定
  keyguardLock.reenableKeyguard();


  Android屏幕常亮/点亮
  //保持屏幕常亮
  PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
  mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, LOCK_TAG);  
  mWakeLock.acquire();


  //释放屏幕常亮锁
  if(null != mWakeLock) {
      mWakeLock.release();
  }
/**
     * 判断桌面是否已添加快捷方式
     * 
     * @param cx
     * @param titleName
     *            快捷方式名称
     * @return
     */
    public static boolean hasShortcut(Context cx) {
        boolean result = false;
        // 获取当前应用名称
        String title = null;
        try {
            final PackageManager pm = cx.getPackageManager();
            title = pm.getApplicationLabel(
                    pm.getApplicationInfo(cx.getPackageName(),
                            PackageManager.GET_META_DATA)).toString();
        } catch (Exception e) {
        }


        final String uriStr;
        if (android.os.Build.VERSION.SDK_INT < 8) {
            uriStr = "content://com.android.launcher.settings/favorites?notify=true";
        } else {
            uriStr = "content://com.android.launcher2.settings/favorites?notify=true";
        }
        final Uri CONTENT_URI = Uri.parse(uriStr);
        final Cursor c = cx.getContentResolver().query(CONTENT_URI, null,
                "title=?", new String[] { title }, null);
        if (c != null && c.getCount() > 0) {
            result = true;
        }
        return result;
    }

 /** *
    * 为当前应用添加桌面快捷方式
    * 
    * @param cx
    * @param appName
    *            快捷方式名称
    */
   public static void addShortcut(Context cx) {
       Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");


       Intent shortcutIntent = cx.getPackageManager()
               .getLaunchIntentForPackage(cx.getPackageName());
       shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
       // 获取当前应用名称
       String title = null;
       try {
           final PackageManager pm = cx.getPackageManager();
           title = pm.getApplicationLabel(
                   pm.getApplicationInfo(cx.getPackageName(),
                           PackageManager.GET_META_DATA)).toString();
       } catch (Exception e) {
       }
       // 快捷方式名称
       shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
       // 不允许重复创建(不一定有效)
       shortcut.putExtra("duplicate", false);
       // 快捷方式的图标
       Parcelable iconResource = Intent.ShortcutIconResource.fromContext(cx,
               R.drawable.ic_launcher);
       shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);


       cx.sendBroadcast(shortcut);
   }

 /***
    * 删除当前应用的桌面快捷方式
    * 
    * @param cx
    */
   public static void delShortcut(Context cx) {
       Intent shortcut = new Intent(
               "com.android.launcher.action.UNINSTALL_SHORTCUT");


       // 获取当前应用名称
       String title = null;
       try {
           final PackageManager pm = cx.getPackageManager();
           title = pm.getApplicationLabel(
                   pm.getApplicationInfo(cx.getPackageName(),
                           PackageManager.GET_META_DATA)).toString();
       } catch (Exception e) {
       }
       // 快捷方式名称
       shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
       Intent shortcutIntent = cx.getPackageManager()
               .getLaunchIntentForPackage(cx.getPackageName());
       shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
       cx.sendBroadcast(shortcut);
   }

相关权限配置
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />


 /**
  * 添加快捷方式到桌面 要点:  
  * 1.给Intent指定action="com.android.launcher.INSTALL_SHORTCUT"
  * 2.给定义为Intent.EXTRA_SHORTCUT_INENT的Intent设置与安装时一致的action(必须要有)  
  * 3.添加权限:com.android.launcher.permission.INSTALL_SHORTCUT
  */

 private void addShortcutToDesktop() {
     Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
     // 不允许重建
     shortcut.putExtra("duplicate", false);
     // 设置名字
     shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,this.getString(R.string.app_name));
     // 设置图标
     shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this,
                     R.drawable.ic_launcher));
     // 设置意图和快捷方式关联程序
     shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,new Intent(this, this.getClass()).setAction(Intent.ACTION_MAIN));
     // 发送广播
     sendBroadcast(shortcut);
 }

 

解决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权限,该权限只赋予系统签名级程序

 

 

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

/** 
 * Home键监听封装 
 *  
 * @author way 
 *  
 */  
public class HomeWatcher {  
  
    static final String TAG = "HomeWatcher";  
    private Context mContext;  
    private IntentFilter mFilter;  
    private OnHomePressedListener mListener;  
    private InnerRecevier mRecevier;  
  
    // 回调接口  
    public interface OnHomePressedListener {  
        public void onHomePressed();  
  
        public void onHomeLongPressed();  
    }  
  
    public HomeWatcher(Context context) {  
        mContext = context;  
        mRecevier = new InnerRecevier();  
        mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);  
    }  
  
    /** 
     * 设置监听 
     *  
     * @param listener 
     */  
    public void setOnHomePressedListener(OnHomePressedListener listener) {  
        mListener = listener;  
    }  
  
    /** 
     * 开始监听,注册广播 
     */  
    public void startWatch() {  
        if (mRecevier != null) {  
            mContext.registerReceiver(mRecevier, mFilter);  
        }  
    }  
  
    /** 
     * 停止监听,注销广播 
     */  
    public void stopWatch() {  
        if (mRecevier != null) {  
            mContext.unregisterReceiver(mRecevier);  
        }  
    }  
  
    /** 
     * 广播接收者 
     */  
    class InnerRecevier extends BroadcastReceiver {  
        final String SYSTEM_DIALOG_REASON_KEY = "reason";  
        final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";  
        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";  
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";  
  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            String action = intent.getAction();  
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {  
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);  
                if (reason != null) {  
                    L.i(TAG, "action:" + action + ",reason:" + reason);  
                    if (mListener != null) {  
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {  
                            // 短按home键  
                            mListener.onHomePressed();  
                        } else if (reason  
                                .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {  
                            // 长按home键  
                            mListener.onHomeLongPressed();  
                        }  
                    }  
                }  
            }  
        }  
    }  
}  

 

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

/**
	 * 获取前置摄像头
	 * @return
	 */
	@TargetApi(9)  
    private int FindFrontCamera(){  
        int cameraCount = 0;  
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();  
        cameraCount = Camera.getNumberOfCameras(); // get cameras number  
                
        for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {  
            Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo  
            if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT ) {   
                // 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置  
               return camIdx;  
            }  
        }  
        return -1;  
    }  
	/**
	 * 获取后置摄像头
	 * @return
	 */
    @TargetApi(9)  
    private int FindBackCamera(){  
        int cameraCount = 0;  
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();  
        cameraCount = Camera.getNumberOfCameras(); // get cameras number  
                
        for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {  
            Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo  
            if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_BACK ) {   
                // 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置  
               return camIdx;  
            }  
        }  
        return -1;  
    }  

//开启摄像头:

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

 

模拟按键:

public static void simulateKey(final int KeyCode) {

	    new Thread() {
	        @Override
	        public void run() {
	            try {
	                Instrumentation inst = new Instrumentation();
	                inst.sendKeyDownUpSync(KeyCode);
	            } catch (Exception e) {
	                Log.e("Exception when sendKeyDownUpSync", e.toString());
	            }
	        }

	    }.start();
	}
	@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis()+100,
                MotionEvent.ACTION_DOWN, 100, 100, 0));
		return super.dispatchKeyEvent(event);
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
		dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
		dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
		return super.dispatchTouchEvent(ev);
	}

/**使用Linux shell命令模拟按键信息
     * run linuix shell cmmand 
     * @param keyCode
     */
    private void runLinuixShell(final int keyCode){
    	try{
        	String keyCommand = "input keyevent " + keyCode;
        	Runtime runtime = Runtime.getRuntime();
        	Process proc=runtime.exec(keyCommand);
        	Log.e("cmdrun","keycode= "+keyCode);
       // 	proc.destroy();
        }catch (IOException e){
        	Log.e("cmderror", e.toString());
        }
    }

 

得到file的MIME类型:

// url = file path or whatever suitable URL you want.
public static String getMimeType(String url)
{
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);
    }
    return type;
}

 

推荐阅读