Android 各种工
新项目,自己整理了一些工具类,
1.首选项
public class SpUtils {/** * 保存在手机里面的文件名 */ public static final String FILE_NAME ="123"; static Context context = BaseApplication.getmContext(); /** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 * * @param key * @param object */ public static void put(String key, Object object) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if (object instanceof String) {editor.putString(key, (String) object); } else if (object instanceof Integer) {editor.putInt(key, (Integer) object); } else if (object instanceof Boolean) {editor.putBoolean(key, (Boolean) object); } else if (object instanceof Float) {editor.putFloat(key, (Float) object); } else if (object instanceof Long) {editor.putLong(key, (Long) object); } else {editor.putString(key, object.toString()); }SharedPreferencesCompat.apply(editor); }/** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 * * @param key * @param defaultObject * @return */ public static Object get(String key, Object defaultObject) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); if (defaultObject instanceof String) {return sp.getString(key, (String) defaultObject); } else if (defaultObject instanceof Integer) {return sp.getInt(key, (Integer) defaultObject); } else if (defaultObject instanceof Boolean) {return sp.getBoolean(key, (Boolean) defaultObject); } else if (defaultObject instanceof Float) {return sp.getFloat(key, (Float) defaultObject); } else if (defaultObject instanceof Long) {return sp.getLong(key, (Long) defaultObject); }return null; }/** * 移除某个key值已经对应的值 */ public static void remove(String key) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.remove(key); SharedPreferencesCompat.apply(editor); }/** * 清除所有数据 */ public static void clear() {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.clear(); SharedPreferencesCompat.apply(editor); }public static void setObject(String key, Object object) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; try {out = new ObjectOutputStream(baos); out.writeObject(object); String objectVal = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); SharedPreferences.Editor editor = sp.edit(); editor.putString(key, objectVal); editor.commit(); } catch (IOException e) {e.printStackTrace(); } finally {try {if (baos != null) {baos.close(); }if (out != null) {out.close(); }} catch (IOException e) {e.printStackTrace(); }}}@SuppressWarnings("unchecked")public static <T> T getObject(String key, Class<T> clazz) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); if (sp.contains(key)) {String objectVal = sp.getString(key, null); byte[] buffer = Base64.decode(objectVal, Base64.DEFAULT); ByteArrayInputStream bais = new ByteArrayInputStream(buffer); ObjectInputStream ois = null; try {ois = new ObjectInputStream(bais); T t = (T) ois.readObject(); return t; } catch (StreamCorruptedException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } catch (ClassNotFoundException e) {e.printStackTrace(); } finally {try {if (bais != null) {bais.close(); }if (ois != null) {ois.close(); }} catch (IOException e) {e.printStackTrace(); }}}return null; }/** * 返回所有的键值对 * * @return */ public static Map<String, ?> getAll() {SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.getAll(); }/** * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 * * @author zhy */ private static class SharedPreferencesCompat {private static final Method sApplyMethod = findApplyMethod(); /** * 反射查找apply的方法 * * @return */ @SuppressWarnings({"unchecked", "rawtypes"})private static Method findApplyMethod() {try {Class clz = SharedPreferences.Editor.class; return clz.getMethod("apply"); } catch (NoSuchMethodException e) {}return null; }/** * 如果找到则使用apply执行,否则使用commit * * @param editor */ public static void apply(SharedPreferences.Editor editor) {try {if (sApplyMethod != null) {sApplyMethod.invoke(editor); return; }} catch (IllegalArgumentException e) {} catch (IllegalAccessException e) {} catch (InvocationTargetException e) {}editor.commit(); }}//返回String值 public static String getString(Context context, String key, String defaultStr){SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.getString(key,defaultStr); }
2.系统工具类
public static final String TAG = SystemTool.class.getSimpleName(); /** * 得到sdk 版本号 * @return */ public static int getSdkVersion() {return Build.VERSION.SDK_INT; }/** * 判断网络是否可用 * @param context 上下文 * @return */ public static boolean isNetworkAvailable(Context context) {try {ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netWorkInfo = cm.getActiveNetworkInfo(); return (netWorkInfo != null && netWorkInfo.isAvailable());// 检测网络是否可用 } catch (Exception e) {e.printStackTrace(); return false; }}/** * 得到版本号 * @param __context * @return */ public static int getAppVersionCode(Context __context) {try {PackageManager __packageManager = __context.getPackageManager(); PackageInfo __packInfo = __packageManager.getPackageInfo(__context.getPackageName(), 0); return __packInfo.versionCode; } catch (NameNotFoundException e) {return -1; }}public static String getProjectName(Context _context){PackageManager pm = _context.getPackageManager(); String appName = _context.getApplicationInfo().loadLabel(pm).toString(); return appName; }/** * 得到版本名称 * @param __context * @return */ public static String getAppVersionName(Context __context) {try {PackageManager __packageManager = __context.getPackageManager(); PackageInfo __packInfo = __packageManager.getPackageInfo(__context.getPackageName(), 0); return __packInfo.versionName; } catch (NameNotFoundException e) {return null; }}public static String getPhoneNum(Context _context) {TelephonyManager phoneMgr = (TelephonyManager) _context.getSystemService(Context.TELEPHONY_SERVICE); return phoneMgr.getLine1Number(); }public static String getIMEI(Context _context) {TelephonyManager _manager = (TelephonyManager) _context.getSystemService(Context.TELEPHONY_SERVICE); String _imei = _manager.getDeviceId(); // 取出IMEI return _imei; }public static String getICCID(Context _context) {TelephonyManager _manager = (TelephonyManager) _context.getSystemService(Context.TELEPHONY_SERVICE); String _iccid = _manager.getSimSerialNumber(); // 取出ICCID return _iccid; }public static String getIMSI(Context _context) {TelephonyManager _manager = (TelephonyManager) _context.getSystemService(Context.TELEPHONY_SERVICE); String _imsi = _manager.getSubscriberId(); // 取出IMSI return _imsi; }public static boolean isPad(Context _context) {if (Build.VERSION.SDK_INT >= 11) {Configuration con = _context.getResources().getConfiguration(); try {Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class); return (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); } catch (Exception e) {e.printStackTrace(); return false; }}return false; }public static Intent call_1(String _phoneNum) {return new Intent(Intent.ACTION_CALL_BUTTON, Uri.parse("tel:" + _phoneNum)); }public static Intent call_2(String _phoneNum) {return new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + _phoneNum)); }/** * 得到设备的唯一Id * @return */ public static String getInstallationId() {return Build.SERIAL; }/** * 得到设备屏幕的宽度 */ public static int getScreenWidth(Context context) {return context.getResources().getDisplayMetrics().widthPixels; }/** * 得到设备屏幕的高度 */ public static int getScreenHeight(Context context) {return context.getResources().getDisplayMetrics().heightPixels; }/** * 得到设备的密度 */ public static float getScreenDensity(Context context) {return context.getResources().getDisplayMetrics().density; }/** * 把密度转换为像素 */ public static int dip2px(Context context, float px) {final float scale = getScreenDensity(context); return (int) (px * scale + 0.5); }
3.ToastUtil 工具类
public class ToastUtil {static String tag = ToastUtil.class.getSimpleName(); // /** // * 居中Toast // * // * @param str // */ // public static void centerToast(Context context, String str) { // Toast toast = Toast.makeText(context, str, Toast.LENGTH_LONG); // toast.setGravity(Gravity.CENTER, 0, 0); // toast.show(); // // } static Toast mToast; /** * 顶部Toast * 非队列形式 * * @param str */ public static void topToast(Context context, String str) {if (context == null) {Log.e(tag, "topToast context == null"); return; }if (str == null || str.equals("")) {Log.e(tag, "topToast str == null"); return; }if (mToast == null) {mToast = Toast.makeText(context, str, Toast.LENGTH_LONG); } else {mToast.setText(str); mToast.setDuration(Toast.LENGTH_LONG); }int topHeight = (int) context.getResources().getDimension(R.dimen.top_hight); mToast.setGravity(Gravity.TOP, 0, dp2px(context, topHeight)); mToast.show(); }/** * 顶部Toast * 非队列形式 * * @param str */ public static void syncToast(Context context, String str, Handler handler, final SyncToastCallback syncToastCallback) {if (context == null) {Log.e(tag, "topToast context == null"); return; }if (str == null || str.equals("")) {Log.e(tag, "topToast str == null"); return; }final Toast toast = Toast.makeText(context, str, Toast.LENGTH_LONG); int topHeight = (int) context.getResources().getDimension(R.dimen.top_hight); toast.setGravity(Gravity.TOP, 0, dp2px(context, topHeight)); toast.show(); handler.postDelayed(new Runnable() {@Override public void run() {toast.cancel(); syncToastCallback.onHide(); }}, 2000); }public static void cancel() {if (mToast != null) {mToast.cancel(); }}public interface SyncToastCallback {void onHide(); }public static int dp2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }public int px2dp(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); }
4.网络类
public class NetworkUtil {public static int NET_CNNT_BAIDU_OK = 1; // NetworkAvailable public static int NET_CNNT_BAIDU_TIMEOUT = 2; // no NetworkAvailable public static int NET_NOT_PREPARE = 3; // Net no ready public static int NET_ERROR = 4; //net error private static int TIMEOUT = 3000; // TIMEOUT /** * check NetworkAvailable * * @param context * @return */ public static boolean isNetworkAvailable(Context context) {ConnectivityManager manager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); if (null == manager)return false; NetworkInfo info = manager.getActiveNetworkInfo(); if (null == info || !info.isAvailable())return false; return true; }/** * 得到ip地址 * * @return */ public static String getLocalIpAddress() {String ret = ""; try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) {ret = inetAddress.getHostAddress().toString(); }}}} catch (SocketException ex) {ex.printStackTrace(); }return ret; }/** * 返回当前网络状态 * * @param context * @return */ public static int getNetState(Context context) {try {ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) {NetworkInfo networkinfo = connectivity.getActiveNetworkInfo(); if (networkinfo != null) {if (networkinfo.isAvailable() && networkinfo.isConnected()) {if (!connectionNetwork())return NET_CNNT_BAIDU_TIMEOUT; else return NET_CNNT_BAIDU_OK; } else {return NET_NOT_PREPARE; }}}} catch (Exception e) {e.printStackTrace(); }return NET_ERROR; }/** * ping "http://www.baidu.com" * * @return */ static private boolean connectionNetwork() {boolean result = false; HttpURLConnection httpUrl = null; try {httpUrl = (HttpURLConnection) new URL("http://www.baidu.com").openConnection(); httpUrl.setConnectTimeout(TIMEOUT); httpUrl.connect(); result = true; } catch (IOException e) {} finally {if (null != httpUrl) {httpUrl.disconnect(); }httpUrl = null; }return result; }/** * check is3G * * @param context * @return boolean */ public static boolean is3G(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) {return true; }return false; }/** * isWifi * * @param context * @return boolean */ public static boolean isWifi(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {return true; }return false; }/** * is2G * * @param context * @return boolean */ public static boolean is2G(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && (activeNetInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE || activeNetInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS || activeNetInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA)) {return true; }return false; }/** * is wifi on */ public static boolean isWifiEnabled(Context context) {ConnectivityManager mgrConn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager mgrTel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return ((mgrConn.getActiveNetworkInfo() != null && mgrConn.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS); }}
5.文件操作类
public final class FileUtil {//格式化的模板 private static final String TIME_FORMAT = "_yyyyMMdd_HHmmss"; private static final String SDCARD_DIR =Environment.getExternalStorageDirectory().getPath(); //默认本地上传图片目录 public static final String UPLOAD_PHOTO_DIR =Environment.getExternalStorageDirectory().getPath() + "/a_upload_photos/"; //网页缓存地址 public static final String WEB_CACHE_DIR =Environment.getExternalStorageDirectory().getPath() + "/app_web_cache/"; //系统相机目录 public static final String CAMERA_PHOTO_DIR =Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/Camera/"; private static String getTimeFormatName(String timeFormatHeader) {final Date date = new Date(System.currentTimeMillis()); //必须要加上单引号 final SimpleDateFormat dateFormat = new SimpleDateFormat("'" + timeFormatHeader + "'" + TIME_FORMAT, Locale.getDefault()); return dateFormat.format(date); }/** * @param timeFormatHeader 格式化的头(除去时间部分) * @param extension 后缀名 * @return 返回时间格式化后的文件名 */ public static String getFileNameByTime(String timeFormatHeader, String extension) {return getTimeFormatName(timeFormatHeader) + "." + extension; }@SuppressWarnings("ResultOfMethodCallIgnored")private static File createDir(String sdcardDirName) {//拼接成SD卡中完整的dir final String dir = SDCARD_DIR + "/" + sdcardDirName + "/"; final File fileDir = new File(dir); if (!fileDir.exists()) {fileDir.mkdirs(); }return fileDir; }@SuppressWarnings("ResultOfMethodCallIgnored")public static File createFile(String sdcardDirName, String fileName) {return new File(createDir(sdcardDirName), fileName); }private static File createFileByTime(String sdcardDirName, String timeFormatHeader, String extension) {final String fileName = getFileNameByTime(timeFormatHeader, extension); return createFile(sdcardDirName, fileName); }//获取文件的MIME public static String getMimeType(String filePath) {final String extension = getExtension(filePath); return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); }//获取文件的后缀名 public static String getExtension(String filePath) {String suffix = ""; final File file = new File(filePath); final String name = file.getName(); final int idx = name.lastIndexOf('.'); if (idx > 0) {suffix = name.substring(idx + 1); }return suffix; }/** * 保存Bitmap到SD卡中 * * @param dir 目录名,只需要写自己的相对目录名即可 * @param compress 压缩比例 100是不压缩,值约小压缩率越高 * @return 返回该文件 */ public static File saveBitmap(Bitmap mBitmap, String dir, int compress) {final String sdStatus = Environment.getExternalStorageState(); // 检测sd是否可用 if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {return null; }FileOutputStream fos = null; BufferedOutputStream bos = null; File fileName = createFileByTime(dir, "DOWN_LOAD", "jpg"); try {fos = new FileOutputStream(fileName); bos = new BufferedOutputStream(fos); mBitmap.compress(Bitmap.CompressFormat.JPEG, compress, bos);// 把数据写入文件 } catch (FileNotFoundException e) {e.printStackTrace(); } finally {try {if (bos != null) {bos.flush(); }if (bos != null) {bos.close(); }//关闭流 if (fos != null) {fos.flush(); }if (fos != null) {fos.close(); }} catch (IOException e) {e.printStackTrace(); }}refreshDCIM(); return fileName; }public static File writeToDisk(InputStream is, String dir, String name) {final File file = FileUtil.createFile(dir, name); BufferedInputStream bis = null; FileOutputStream fos = null; BufferedOutputStream bos = null; try {bis = new BufferedInputStream(is); fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); byte data[] = new byte[1024 * 4]; int count; while ((count = bis.read(data)) != -1) {bos.write(data, 0, count); }bos.flush(); fos.flush(); } catch (IOException e) {e.printStackTrace(); } finally {try {if (bos != null) {bos.close(); }if (fos != null) {fos.close(); }if (bis != null) {bis.close(); }is.close(); } catch (IOException e) {e.printStackTrace(); }}return file; }public static File writeToDisk(InputStream is, String dir, String prefix, String extension) {final File file = FileUtil.createFileByTime(dir, prefix, extension); BufferedInputStream bis = null; FileOutputStream fos = null; BufferedOutputStream bos = null; try {bis = new BufferedInputStream(is); fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); byte data[] = new byte[1024 * 4]; int count; while ((count = bis.read(data)) != -1) {bos.write(data, 0, count); }bos.flush(); fos.flush(); } catch (IOException e) {e.printStackTrace(); } finally {try {if (bos != null) {bos.close(); }if (fos != null) {fos.close(); }if (bis != null) {bis.close(); }is.close(); } catch (IOException e) {e.printStackTrace(); }}return file; }/** * 通知系统刷新系统相册,使照片展现出来 */ private static void refreshDCIM() {if (Build.VERSION.SDK_INT >= 19) {//兼容android4.4版本,只扫描存放照片的目录 MediaScannerConnection.scanFile(disanxue.getApplicationContext(), new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()}, null, null); } else {//扫描整个SD卡来更新系统图库,当文件很多时用户体验不佳,且不适合4.4以上版本 disanxue.getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +Environment.getExternalStorageDirectory()))); }}/** * 读取raw目录中的文件,并返回为字符串 */ public static String getRawFile(int id) {final InputStream is = disanxue.getApplicationContext().getResources().openRawResource(id); final BufferedInputStream bis = new BufferedInputStream(is); final InputStreamReader isr = new InputStreamReader(bis); final BufferedReader br = new BufferedReader(isr); final StringBuilder stringBuilder = new StringBuilder(); String str; try {while ((str = br.readLine()) != null) {stringBuilder.append(str); }} catch (IOException e) {e.printStackTrace(); } finally {try {br.close(); isr.close(); bis.close(); is.close(); } catch (IOException e) {e.printStackTrace(); }}return stringBuilder.toString(); }public static void setIconFont(String path, TextView textView) {final Typeface typeface = Typeface.createFromAsset(disanxue.getApplicationContext().getAssets(), path); textView.setTypeface(typeface); }/** * 读取assets目录下的文件,并返回字符串 */ public static String getAssetsFile(String name) {InputStream is = null; BufferedInputStream bis = null; InputStreamReader isr = null; BufferedReader br = null; StringBuilder stringBuilder = null; final AssetManager assetManager = disanxue.getApplicationContext().getAssets(); try {is = assetManager.open(name); bis = new BufferedInputStream(is); isr = new InputStreamReader(bis); br = new BufferedReader(isr); stringBuilder = new StringBuilder(); String str; while ((str = br.readLine()) != null) {stringBuilder.append(str); }} catch (IOException e) {e.printStackTrace(); } finally {try {if (br != null) {br.close(); }if (isr != null) {isr.close(); }if (bis != null) {bis.close(); }if (is != null) {is.close(); }assetManager.close(); } catch (IOException e) {e.printStackTrace(); }}if (stringBuilder != null) {return stringBuilder.toString(); } else {return null; }}public static String getRealFilePath(final Context context, final Uri uri) {if (null == uri) return null; final String scheme = uri.getScheme(); String data = null; if (scheme == null)data = uri.getPath(); else if (ContentResolver.SCHEME_FILE.equals(scheme)) {data = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {final Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null); if (null != cursor) {if (cursor.moveToFirst()) {final int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); if (index > -1) {data = cursor.getString(index); }}cursor.close(); }}return data; } }
Android 各种工相关推荐
- android 蓝牙控制开发,Android开发工控软件--蓝牙控制
最近一直在忙Android的工控软件设计,写一点心得,希望对这方面开发的有一点带你帮助. 1)从蓝牙接收了数据又如何保存? 之前没有想过接收的数据如何保存,就简单的用一个字节数组进行保存,后来处理数据 ...
- Android逆向工程之dx工具jar2dex失败,使用d8
遇到问题 在使用apktool做apk逆向工程时,我们一般都需要将apk反编译为smail,然后将要加入其中的SDK也编译成smail,然后将二者合并起来之后打包成一个新的apk,其中将SDK的jar ...
- android逆向工程之apktool工具集
Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片.XML配置.语言资源等文件,也可以添加新的功能到APK文件中. apk反编译软件有个组合套餐 ...
- Android 大杂烩工程之ListView的开发2以及数据仓库开发模式
今天是放完假后工作的第一天,为了证明我不是一段幽灵代码,我给各位看客老爷们说句:祝大家节日过得愉快(过得不愉快那也是人之常情). 我们继续来讲一讲ListView的开发,上次讲到了ListView的适 ...
- xposed安装,与android逆向工程之xposed的hook
Xposed installer安卓安装和使用 文章目录 Xposed installer安卓安装和使用 (一)Xposed installer安卓安装 0.百度网盘-我所用的apk(3.1.5)和z ...
- Android studio-人工智能:中国象棋
(下载资源在文末) 项目用到PVS算法+置换表+历史表(有代码注解) (1)其中有人机对弈和双人对弈两个对弈功能 (2)帮助是给新人了解象棋的规则 (3)设置是开启/关闭背景音乐和下棋音效的 (4)进 ...
- Android merge优化UI
简说 安卓在加载视图的时候,无论根节点是线性布局还是相对布局,系统都会在上一层添加一个<FrameLayout.>,也就是说任何形式的布局都会被包含在framelayout布局中 减少视图 ...
- c# 程序员学习android(1)引导界面--viewpager的使用
本次之前说一下android开发工具.android开发工具有2种,一种是eclipse 一个是谷歌android-studio-bundle 前者需要配置,后者不需要.会自动下载sdk.配置方法我就 ...
- QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
一.环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件): https://download.csdn.net/do ...
最新文章
- 【里程碑式证明】同时解决了量子物理学和理论数学的难题!
- Java EE官方文档汇总
- hashmap的get查找过程
- 认证模式之Basic模式
- debian下运行netstat失败
- vue 获取元素在浏览器的位置_前端开发JS获取页面元素的位置
- docker版本包 乌班图_Ubuntu安装Docker方式一:软件包安装
- Linux 6.5选包截图
- 记录centos 7.9 LNMP为网站申请SSL证书详细操作
- excel数字点一下才变为数值的批量快捷操作
- libsvmpredict和svmtrain的参数和返回值
- 在ThinkPHP中开启调试模式
- 面经——oppo2022校招Linux系统工程师
- 把Bing改为锁屏键
- 基于WK2168的串口服务器设计方案
- 每日一问-ChapGPT-20230405-中医基础-五运六气三阴三阳
- Server U 的使用
- MNN推理引擎框架简介
- Duplicate Cleaner - 重复文件 / 相似文件扫描 - 构建深度学习标注数据集
- 6.29黄金非农周坚持做空多头反弹疲软美元指数走强金价承压