Android手机管理工具类

Posted 彬sir哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android手机管理工具类相关的知识,希望对你有一定的参考价值。

android手机管理工具类 AppPhoneMgr

工具类内的方法:

getInstance          : 单例对象
getSDKVersionNumber  : 获取手机系统版本号
getPhoneModel        : 获取手机型号
getPhoneWidth        : 获取手机宽度
getPhoneHeight       : 获取手机高度
getPhoneImei         : 获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID
getPhoneSim          : 获取手机sim卡号
getPhoneNum          : 获取手机号
isSDCardMount        : 判断sd卡是否挂载
getSDFreeSize        : 获取sd卡剩余空间的大小
getSDAllSize         : 获取sd卡空间的总大小
isTablet             : 判断是否是平板
isApkInstalled       : 判断一个apk是否安装
getAppPermissions    : 获取应用权限 名称列表
getInstalledApp      : 获取手机内安装的应用
getUserInstalledApp  : 获取手机安装非系统应用
getInstalledAppInfo  : 获取安装应用的信息
startAppPkg          : 打开指定包名的应用
unInstallApk         : 卸载指定包名的应用
callPhone            : 直接呼叫指定的号码
toCallPhoneActivity  : 跳转至拨号界面
sendMessage          : 直接调用短信API发送信息(设置监听发送和接收状态)
toSendMessageActivity: 跳转至发送短信界面(自动设置接收方的号码)

AppPhoneMgr类的代码

 package com.example.phone;

import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
import android.provider.Contacts;
import android.telephony.TelephonyManager;
import android.view.WindowManager;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 主要功能:手机管理工具类
 */

public class AppPhoneMgr {
    private static AppPhoneMgr phoneUtil;

    public static AppPhoneMgr getInstance() {
        if (phoneUtil == null) {
            synchronized (AppPhoneMgr.class) {
                if (phoneUtil == null) {
                    phoneUtil = new AppPhoneMgr();
                }
            }
        }
        return phoneUtil;
    }

    /**
     * 获取手机系统版本号
     *
     * @return
     */
    public Integer getSDKVersionNumber() {
        Integer sdkVersion;
        try {
            sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK_INT);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            sdkVersion = Integer.valueOf(0);
        }
        return sdkVersion;
    }

    /**
     * 获取手机型号
     */
    public String getPhoneModel() {
        return android.os.Build.MODEL;
    }

    /**
     * 获取手机宽度
     */
    @SuppressWarnings("deprecation")
    public int getPhoneWidth(Context context) {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        return wm.getDefaultDisplay().getWidth();
    }

    /**
     * 获取手机高度
     *
     * @param context
     */
    @SuppressWarnings("deprecation")
    public int getPhoneHeight(Context context) {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        return wm.getDefaultDisplay().getHeight();
    }

    /**
     * 获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID.
     *
     * @param context
     */
    public String getPhoneImei(Context context) {
        TelephonyManager tm = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        if (tm == null)
            return null;
        return tm.getDeviceId();
    }

    /**
     * 获取手机sim卡号
     *
     * @param context
     */
    public String getPhoneSim(Context context) {
        TelephonyManager tm = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        if (tm == null)
            return null;
        return tm.getSubscriberId();
    }

    /**
     * 获取手机号
     *
     * @param context
     */
    public String getPhoneNum(Context context) {
        TelephonyManager tm = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        if (tm == null)
            return null;
        return tm.getLine1Number();
    }

    /**
     * 判断sd卡是否挂载
     */
    public boolean isSDCardMount() {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取sd卡剩余空间的大小
     */
    @SuppressWarnings("deprecation")
    public long getSDFreeSize() {
        File path = Environment.getExternalStorageDirectory(); // 取得SD卡文件路径
        StatFs sf = new StatFs(path.getPath());
        long blockSize = sf.getBlockSize(); // 获取单个数据块的大小(Byte)
        long freeBlocks = sf.getAvailableBlocks();// 空闲的数据块的数量
        // 返回SD卡空闲大小
        return (freeBlocks * blockSize) / 1024 / 1024; // 单位MB
    }

    /**
     * 获取sd卡空间的总大小
     */
    @SuppressWarnings("deprecation")
    public long getSDAllSize() {
        File path = Environment.getExternalStorageDirectory(); // 取得SD卡文件路径
        StatFs sf = new StatFs(path.getPath());
        long blockSize = sf.getBlockSize(); // 获取单个数据块的大小(Byte)
        long allBlocks = sf.getBlockCount(); // 获取所有数据块数
        // 返回SD卡大小
        return (allBlocks * blockSize) / 1024 / 1024; // 单位MB
    }

    /**
     * 判断是否是平板
     */
    public boolean isTablet(Context context) {
        return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }

    /**
     * 判断一个apk是否安装
     *
     * @param context
     * @param packageName
     */
    public boolean isApkInstalled(Context context, String packageName) {
        PackageManager pm = context.getPackageManager();
        try {
            pm.getPackageInfo(packageName, 0);
        } catch (NameNotFoundException e) {
            return false;
        }
        return true;
    }

    /**
     * 拨打电话
     *
     * @param context
     * @param phoneNum
     */
    public void call(Context context, String phoneNum) throws Exception {
        if (phoneNum != null && !phoneNum.equals("")) {
            Uri uri = Uri.parse("tel:" + phoneNum);
            Intent intent = new Intent(Intent.ACTION_DIAL, uri);
            context.startActivity(intent);
        }
    }

    /**
     * 跳转到联系人界面
     */

    public void toChooseContactsList(Context context) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Contacts.People.CONTENT_URI);
        context.startActivity(intent);
    }

    /**
     * 发送短信界面  ,现在好像不行了
     */
    public void toSendMessageActivity(Context context, String number) {
        try {
            Uri uri = Uri.parse("smsto:" + number);
            Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 打开网页
     */
    public void openWeb(Context context, String url) {
        try {
            Uri uri = Uri.parse(url);
            context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取应用权限 名称列表
     */
    public String[] getAppPermissions(Context context)
            throws NameNotFoundException {
        PackageManager pm = context.getPackageManager();
        PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(),
                PackageManager.GET_PERMISSIONS);
        return getAppPermissions(packageInfo);
    }

    public String[] getAppPermissions(PackageInfo packageInfo)
            throws NameNotFoundException {
        return packageInfo.requestedPermissions;
    }

    /**
     * 获取手机内安装的应用
     */
    public List<PackageInfo> getInstalledApp(Context context) {
        PackageManager pm = context.getPackageManager();
        return pm.getInstalledPackages(0);
    }

    /**
     * 获取手机安装非系统应用
     */
    @SuppressWarnings("static-access")
    public List<PackageInfo> getUserInstalledApp(Context context) {
        List<PackageInfo> infos = getInstalledApp(context);
        List<PackageInfo> apps = new ArrayList<PackageInfo>();
        for (PackageInfo info : infos) {
            if ((info.applicationInfo.flags & info.applicationInfo.FLAG_SYSTEM) <= 0) {
                apps.add(info);
            }
        }
        infos.clear();
        infos = null;
        return apps;
    }

    /**
     * 获取安装应用的信息
     */
    public Map<String, Object> getInstalledAppInfo(Context context,
                                                   PackageInfo info) {
        Map<String, Object> appInfos = new HashMap<String, Object>();
        PackageManager pm = context.getPackageManager();
        ApplicationInfo aif = info.applicationInfo;
        appInfos.put("icon", pm.getApplicationIcon(aif));
        appInfos.put("lable", pm.getApplicationLabel(aif));
        appInfos.put("packageName", aif.packageName);
        return appInfos;
    }

    /**
     * 打开指定包名的应用
     */
    public void startAppPkg(Context context, String pkg) {
        Intent startIntent = context.getPackageManager()
                .getLaunchIntentForPackage(pkg);
        startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(startIntent);
    }

    /**
     * 卸载指定包名的应用
     */
    public void unInstallApk(Context context, String packageName) {
        Uri uri = Uri.parse("package:" + packageName);
        Intent intent = new Intent(Intent.ACTION_DELETE);
        intent.setData(uri);
        context.startActivity(intent);
    }

    /**
     * 手机号判断
     */
    public static boolean isMobileNO(String mobile) {
        Pattern p = Pattern
                .compile("^((145|147)|(15[^4])|(17[0-9])|((13|18)[0-9]))\\\\d{8}$");
        Matcher m = p.matcher(mobile);
        return m.matches();
    }
}

Activity的调用示例代码:

package com.example.phone;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * 手机管理工具类的使用示例
 */
public class MyActivity extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }

    /**
     * 获取手机系统版本号
     *
     * @return
     */
    public void getSDKVersionNumber(View view) {
        Integer sdkVersionNumber = AppPhoneMgr.getInstance().getSDKVersionNumber();
        showToast(" \\n 获取手机系统版本号:" + sdkVersionNumber);
    }

    /**
     * 获取手机型号
     */
    public void getPhoneModel(View view) {
        String phoneModel = AppPhoneMgr.getInstance().getPhoneModel();
        showToast(" \\n 获取手机型号:" + phoneModel);
    }

    /**
     * 获取手机宽度
     */
    public void getPhoneWidth(View view) {
        int phoneWidth = AppPhoneMgr.getInstance().getPhoneWidth(this);
        showToast(" \\n 获取手机宽度:" + phoneWidth);
    }

    /**
     * 获取手机高度
     */
    public void getPhoneHeight(View view) {
        int phoneHeight = AppPhoneMgr.getInsta

以上是关于Android手机管理工具类的主要内容,如果未能解决你的问题,请参考以下文章

iOS 相当于 Android 片段/布局

Android获取手机经纬度(GPSNetWork)封装工具类

Android手机管理工具类

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

如何将应用程序对象放入片段类

如何禁用在android片段类中按下的后退按钮