android 学习笔记有用代码片段(1-2-3整合)
应用重启
方法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; }