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;
}

浙公网安备 33010602011771号