微信号:jszj2014215

介绍:主要分享移动互联网的相关产品和资讯,关注你将学习到更多,在互联网的当下你会赚更多的钱...

Android开发人员不得不收集的代码

2016-09-14 10:25 Android技术之家
  • 尺寸相关

    • dp与px转换 dp2pxpx2dp

    • sp与px转换 sp2pxpx2sp

    • 各种单位转换 applyDimension

    • 在onCreate()即可强行获取View的尺寸 forceGetViewSize

    • ListView中提前测量View尺寸 measureView

  • 设备相关

    • 获取设备MAC地址 getMacAddress

    • 获取设备厂商,如Xiaomi getManufacturer

    • 获取设备型号,如MI2SC getModel

    • 获取设备SD卡是否可用 isSDCardEnable

    • 获取设备SD卡路径 getSDCardPath

  • 手机相关

    • 判断设备是否是手机 isPhone

    • 获取手机的IMIE getDeviceIMEI

    • 获取手机状态信息 getPhoneStatus

    • 拨打电话 callDial

    • 发送短信 sendSms

    • 获取手机联系人 getAllContactInfo

    • 打开手机联系人界面点击联系人后便获取该号码 getContantNum

    • 获取手机短信并保存到xml中 getAllSMS

  • 网络相关

    • 打开网络设置界面 openWirelessSettings

    • 判断是否网络连接 isConnected

    • 判断wifi是否连接状态 isWifiConnected

    • 获取移动网络运营商名称 getNetworkOperatorName

    • 获取移动终端类型 getPhoneType

    • 获取连接的网络类型(2G,3G,4G) getCurNetworkType

    • 获取当前手机的网络类型(WIFI,2G,3G,4G) getNetWorkStatus

  • App相关

    • 安装指定路径下的Apk installApk

    • 卸载指定包名的App uninstallApp

    • 获取App名称 getAppName

    • 获取当前App版本号 getVersonName

    • 获取当前App版本Code getVersionCode

    • 打开指定包名的App openOtherApp

    • 打开指定包名的App应用信息界面 showAppInfo

    • 分享Apk信息 shareApkInfo

    • 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)getAppInfos

    • 判断当前App处于前台还是后台 isApplicationBackground

  • 屏幕相关

    • 获取手机分辨率 getDeviceWidthgetDeviceHeight

    • 获取状态栏高度 getStatusBarHeight

    • 获取状态栏高度+标题栏(ActionBar)高度 getTopBarHeight

    • 获取屏幕截图 snapShotWithStatusBarsnapShotWithoutStatusBar

    • 设置透明状态栏,需在setContentView之前调用

  • 键盘相关

    • 避免输入法面板遮挡

    • 动态隐藏软键盘 hideSoftInput

    • 点击屏幕空白区域隐藏软键盘

    • 动态显示软键盘 showSoftInput

    • 切换键盘显示与否状态 toggleSoftInput

  • 正则相关

    • 正则工具类

  • 加解密相关

    • MD5加密 encryptMD5

    • SHA加密 encryptSHA

  • 未归类

    • 获取服务是否开启 isRunningService

  • 更新Log

尺寸相关

dp与px转换

/** * dp转px */public static int dp2px(Context context, float dpValue) {    final float scale = context.getResources().getDisplayMetrics().density;    return (int) (dpValue * scale + 0.5f);
}/** * px转dp */public static int px2dp(Context context, float pxValue) {    final float scale = context.getResources().getDisplayMetrics().density;    return (int) (pxValue / scale + 0.5f);
}

sp与px转换

/** * sp转px */public static int sp2px(Context context, float spValue) {    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;    return (int) (spValue * fontScale + 0.5f);
}/** * px转sp */public static int px2sp(Context context, float pxValue) {    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;    return (int) (pxValue / fontScale + 0.5f);
}

各种单位转换

/** * 各种单位转换 * 该方法存在于TypedValue */public static float applyDimension(int unit, float value, DisplayMetrics metrics) {    switch (unit) {        case TypedValue.COMPLEX_UNIT_PX:            return value;        case TypedValue.COMPLEX_UNIT_DIP:            return value * metrics.density;        case TypedValue.COMPLEX_UNIT_SP:            return value * metrics.scaledDensity;        case TypedValue.COMPLEX_UNIT_PT:            return value * metrics.xdpi * (1.0f / 72);        case TypedValue.COMPLEX_UNIT_IN:            return value * metrics.xdpi;        case TypedValue.COMPLEX_UNIT_MM:            return value * metrics.xdpi * (1.0f / 25.4f);
    }    return 0;
}

在onCreate()即可强行获取View的尺寸

/** * 在onCreate()即可强行获取View的尺寸 */public static int[] forceGetViewSize(View view) {    int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);    int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    view.measure(widthMeasureSpec, heightMeasureSpec);    return new int[]{view.getMeasuredWidth(), view.getMeasuredHeight()};
}

ListView中提前测量View尺寸

/** * ListView中提前测量View尺寸 * 如headerView,用的时候拷贝到ListView中 */private void measureView(View view) {
    ViewGroup.LayoutParams p = view.getLayoutParams();    if (p == null) {
        p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
    }    int width = ViewGroup.getChildMeasureSpec(0, 0, p.width);    int height;    int tempHeight = p.height;    if (tempHeight > 0) {
        height = MeasureSpec.makeMeasureSpec(tempHeight,
                MeasureSpec.EXACTLY);
    } else {
        height = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
    }
    view.measure(width, height);
}

设备相关

获取设备MAC地址

/** * 获取设备MAC地址 * 需添加权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> */public static String getMacAddress(Context context) {
    String macAddress = null;
    WifiManager wifi = (WifiManager) context
            .getSystemService(Context.WIFI_SERVICE);
    WifiInfo info = wifi.getConnectionInfo();    if (null != info ) {
        macAddress = info.getMacAddress();        if (null != macAddress) {
            macAddress = macAddress.replace(":", "");
        }
    }    return macAddress;
}

获取设备厂商,如Xiaomi

/** * 获取设备厂商,如Xiaomi */public static String getManufacturer() {
    String MANUFACTURER = Build.MANUFACTURER;    return MANUFACTURER;
}

获取设备型号,如MI2SC

/** * 获取设备型号,如MI2SC */public static String getModel() {
    String model = Build.MODEL;    if (model != null) {
        model = model.trim().replaceAll("\\s*", "");
    } else {
        model = "";
    }    return model;
}

获取设备SD卡是否可用

/** * 获取设备SD卡是否可用 */public static boolean isSDCardEnable() {    return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
}

获取设备SD卡路径

/** * 获取设备SD卡路径 */public static String getSDCardPath() {    return Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
}

手机相关

判断设备是否是手机

/** * 判断设备是否是手机 */public static boolean isPhone(Context context) {
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);    return tm.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE;
}

获取手机的IMIE

/** * 获取当前设备的IMIE,需与上面的isPhone一起使用 * 需添加权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/> */public static String getDeviceIMEI(Context context) {
    String deviceId;    if (isPhone(context)) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        deviceId = tm.getDeviceId();
    } else {
        deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }    return deviceId;
}

获取手机状态信息

/** * 获取手机状态信息 * 需添加权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/> * 返回如下 * DeviceId(IMEI) = 99000311726612 * DeviceSoftwareVersion = 00 * Line1Number = * NetworkCountryIso = cn * NetworkOperator = 46003 * NetworkOperatorName = 中国电信 * NetworkType = 6 * honeType = 2 * SimCountryIso = cn * SimOperator = 46003 * SimOperatorName = 中国电信 * SimSerialNumber = 89860315045710604022 * SimState = 5 * SubscriberId(IMSI) = 460030419724900 * VoiceMailNumber = *86 */public static String getPhoneStatus(Context context) {
    TelephonyManager tm = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);
    String str = "";
    str += "DeviceId(IMEI) = " + tm.getDeviceId() + "\n";
    str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() + "\n";
    str += "Line1Number = " + tm.getLine1Number() + "\n";
    str += "NetworkCountryIso = " + tm.getNetworkCountryIso() + "\n";
    str += "NetworkOperator = " + tm.getNetworkOperator() + "\n";
    str += "NetworkOperatorName = " + tm.getNetworkOperatorName() + "\n";
    str += "NetworkType = " + tm.getNetworkType() + "\n";
    str += "honeType = " + tm.getPhoneType() + "\n";
    str += "SimCountryIso = " + tm.getSimCountryIso() + "\n";
    str += "SimOperator = " + tm.getSimOperator() + "\n";
    str += "SimOperatorName = " + tm.getSimOperatorName() + "\n";
    str += "SimSerialNumber = " + tm.getSimSerialNumber() + "\n";
    str += "SimState = " + tm.getSimState() + "\n";
    str += "SubscriberId(IMSI) = " + tm.getSubscriberId() + "\n";
    str += "VoiceMailNumber = " + tm.getVoiceMailNumber() + "\n";    return str;
}

拨打电话

// 需添加权限<uses-permission android:name="android.permission.CALL_PHONE"/>/** * 拨打电话 */public static void callDial(Context context, String phoneNumber) {
    context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)));
}

发送短信

/** * 发送短信 */public static void sendSms(Context context, String phoneNumber, String content) {
    Uri uri = Uri.parse("smsto:" + (TextUtils.isEmpty(phoneNumber) ? "" : phoneNumber));
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
    intent.putExtra("sms_body", TextUtils.isEmpty(content) ? "" : content);
    context.startActivity(intent);
}

获取手机联系人

/** * 获取手机联系人 * 需添加权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> * 需添加权限<uses-permission android:name="android.permission.READ_CONTACTS" /> */public static List<HashMap<String, String>> getAllContactInfo(Context context) {
    SystemClock.sleep(3000);
    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();    // 1.获取内容解析者
    ContentResolver resolver = context.getContentResolver();    // 2.获取内容提供者的地址:com.android.contacts
    // raw_contacts表的地址 :raw_contacts
    // view_data表的地址 : data
    // 3.生成查询地址
    Uri raw_uri = Uri.parse("content://com.android.contacts/raw_contacts");
    Uri date_uri = Uri.parse("content://com.android.contacts/data");    // 4.查询操作,先查询raw_contacts,查询contact_id
    // projection : 查询的字段
    Cursor cursor = resolver.query(raw_uri, new String[] { "contact_id" },            null, null, null);    // 5.解析cursor
    while (cursor.moveToNext()) {        // 6.获取查询的数据
        String contact_id = cursor.getString(0);        // cursor.getString(cursor.getColumnIndex("contact_id"));//getColumnIndex
        // : 查询字段在cursor中索引值,一般都是用在查询字段比较多的时候
        // 判断contact_id是否为空
        if (!TextUtils.isEmpty(contact_id)) {//null   ""
            // 7.根据contact_id查询view_data表中的数据
            // selection : 查询条件
            // selectionArgs :查询条件的参数
            // sortOrder : 排序
            // 空指针: 1.null.方法 2.参数为null
            Cursor c = resolver.query(date_uri, new String[] { "data1",                            "mimetype" }, "raw_contact_id=?",                    new String[] { contact_id }, null);
            HashMap<String, String> map = new HashMap<String, String>();            // 8.解析c
            while (c.moveToNext()) {                // 9.获取数据
                String data1 = c.getString(0);
                String mimetype = c.getString(1);                // 10.根据类型去判断获取的data1数据并保存
                if (mimetype.equals("vnd.android.cursor.item/phone_v2")) {                    // 电话
                    map.put("phone", data1);
                } else if (mimetype.equals("vnd.android.cursor.item/name")) {                    // 姓名
                    map.put("name", data1);
                }
            }            // 11.添加到集合中数据
            list.add(map);            // 12.关闭cursor
            c.close();
        }
    }    // 12.关闭cursor
    cursor.close();    return list;
}

打开手机联系人界面点击联系人后便获取该号码

/** * 打开手机联系人界面点击联系人后便获取该号码 * 参照以下代码 */private void getContantNum() {    /*    Intent intent = new Intent();    intent.setAction("android.intent.action.PICK");    intent.addCategory("android.intent.category.DEFAULT");    intent.setType("vnd.android.cursor.dir/phone_v2");    startActivityForResult(intent, 0);    @Override    protected void onActivityResult ( int requestCode, int resultCode, Intent data){        super.onActivityResult(requestCode, resultCode, data);        if (data != null) {            Uri uri = data.getData();            String num = null;            // 创建内容解析者            ContentResolver contentResolver = getContentResolver();            Cursor cursor = contentResolver.query(uri,                    null, null, null, null);            while (cursor.moveToNext()) {                num = cursor.getString(cursor.getColumnIndex("data1"));            }            cursor.close();            num = num.replaceAll("-", "");//替换的操作,555-6 -> 5556        }    }    */}
 
Android技术之家 更多文章 Gradle打包APK的一些小技巧和productFlavor配置 AndroidStudio之如何使用aar Android自定义控件常用方法总结 软件架构入门,看这篇就够了··· Android:用GSON 五招之内搞定任何JSON数组
猜您喜欢 火热出炉,千锋教育2013年毕业学员就业数据大统计 【技术博客】Spark性能优化指南——高级篇 Jenkins+git+cppcheck静态代码检查应用 ubuntu下SVN服务器安装配置 腾讯主要创始人陈一丹,我为什么要拿出25亿,设全球最高教育奖