精华内容
下载资源
问答
  • 怎么设置获取设备信息权限
    千次阅读
    2021-06-08 02:36:11

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。

    以安卓手机获取通讯录为例,开启获取手机信息权限的方法:

    1、打开【安全中心】,进入【授权管理】。

    2、选择【应用权限管理】。

    3、选择【应用管理】。

    4、在应用列表中找到想要开通权限的应用,点击进入。

    5、在权限列表中找到【读取联系人】。

    6、点击【读取联系人】,在下方弹出来的选项中选择“允许”即可。

    有几项技术可以解决非结构化数据的安全,但是一旦数据离开网络,这些安全技术就会因为不能控制数据迁移后的环境而失去效果。这些技术有一个共同点,安全控制绑定在数据本身之外,例如网络或者计算机周边设备。不管数据传输至何处,只有一种技术能完全保护数据的访问。它对元数据建立分类、访问控制以及有关个人用户允许访问数据的权限信息,该解决方案被称为信息权限管理(IRM)。

    启用 IRM 的文档包含内容许可。内容许可包含电子邮件地址、权限信息和身份验证信息。每当有人试图打开启用 IRM 的文档时,Office Word 2003 都将根据该用户的标识检查保存在文档中的内容许可。如果该用户以前从未打开该文档,Office Word 2003 将与 IRM 服务器联系,验证该用户的标识,为其下载新的内容许可(假设该用户具有所需的权限),并将该内容许可保存到文档。

    更多相关内容
  • 安卓手机在安装软件的时候,总是会要求获取各种权限,除了...一、软件权限获取问题我们在软件刚安装的时候,都会检查权限设置,但是有时候,一些软件授权后,使用时间久了,我们要如何查看它都曾经获取过什么权限呢...

    安卓手机在安装软件的时候,总是会要求获取各种权限,除了一些必要权限外,有时还会索要一些敏感权限,如:电话、联系人等权限。工信部也在去年,展开了一次大规模的整顿,,现在很多软件拒绝了权限,也是可以使用的。不过接下来,每使用一次,就会弹出一次请求,也是让人头大。

    2e391978ddde62d41022463ce4c046d2.png

    一、软件权限获取问题

    我们在软件刚安装的时候,都会检查权限设置,但是有时候,一些软件授权后,使用时间久了,我们要如何查看它都曾经获取过什么权限呢?

    1、应用查看

    我们可以通过「设置—应用管理」,点击要查询的软件,通过其中的「权限管理」,查看软件锁索取的所有权限。

    621384f0d5e37541c18567dd882f4b35.png

    2、权限查看

    我们也可以直接通过「设置—权限管理」,查看各个权限下的应用获取情况,这个可以帮助我们清晰的看到都有什么软件获取了这一权限,更加方便管理。

    5dc67fb4eadcecc6a772805625282635.png

    二、权限获取是否泄漏隐私

    面对软件的各种权限获取,你是否会担心自己的隐私因此而泄露呢?你是否会为了使用软件,而同意一些不合理的获取要求呢? 在软件要求下面几项权限时,你一定要特别注意哦!

    1、读取短信

    现在我们已经很少使用短信了,不过,在使用软件中,有时候会需要使用到验证码,这是我们使用软件的临时身份证。所以,在允许短信权限时也要很小心。

    184a7af8848096879fe026d0fc9f0818.png

    2、联系人、电话

    在这一点上,大家应该都是十分小心的,以免好友信息、联系人信息泄露,被作为信息出卖等。

    e76e5bdfa5adcac2baa14b0ebad1f5ea.png

    3、获取位置

    现在很多的软件都会有获取定位权限,但其实除了一些地图软件外,其他的软件很多是不需要这一点的,所以,为了防止我们的位置信息泄露,着一个权限在很多软件中是并不需要授予的。

    67db81128040d06fc587fc7bfb320354.png

    4、获取相机

    获取相机权限,这在很多APP上都会出现,而对于这个权限,可能很多人都不是特别在意。但是需要注意的是,相机权限获取的可能不仅仅是手机摄像头,同时也会对相册进行扫描,泄露我们的图片信息。

    28919a52e5daae94878ec7103d662a93.png

    三、解除权限

    那么,如果当我们想要解除某一软件权限时,又该怎么做呢?

    1、禁止权限使用

    我们可以按照第一步介绍的两种方法,分别从「应用管理」和「权限管理」两个入口,来解除软件权限获取。点击页面内的某一具体权限,就,然后在弹出的新窗口中选择“拒绝”,就可以关闭授权了。

    8ddda7479ed461b18276d2ba67102b17.png

    2、仅运行时允许

    而如果你是“Android 10”用户的话,还可以通过选择“仅运行是允许”来设置软件权限获取,这样可以保证软件的正常使用,也可以防止软件在后台持续获取信息,比“询问”设置更加方便省心。

    9d13a94031534ef50df42ccb982dc60a.png

    好了,以上就是今天介绍的有关手机权限获取的相关内容了,觉得有用的记得点赞哦。如果你对权限获取有自己的独特见解,也欢迎在评论区讨论哦!

    展开全文
  • Android 设备信息获取详解

    万次阅读 多人点赞 2020-11-16 07:59:19
    和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、获取手机基本信息(厂商、型号等参数)二、设备信息获取实现图三、获取手机设备 宽、高、IME...

    和你一起终身学习,这里是程序员Android

    经典好文推荐,通过阅读本文,您将收获以下知识点:

    一、获取手机基本信息(厂商、型号等参数)
    二、设备信息获取实现图
    三、获取手机设备 宽、高、IMEI 信息
    四、获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名
    五、获取手机硬件名、SDK版本、android版本 、语言支持、默认语言
    六、获取 SD 卡存储信息
    七、获取手机 RAM、ROM存储信息
    八、DeviceInfoUtils 封装类
    九、SDCardUtils 封装类

    下面将讲解以上信息的获取方法。

    一、 获取手机基本信息(厂商、型号等参数)

    以小米手机为例,手机常用的基本信息可以在Settings--> About Phone中看到,
    例如下图:

    小米手机设备信息图

    那么如何获取这些设备信息呢? Android中 通常通过 android.os.Build类方法可以获取更多手机设备信息。

    二、 设备信息获取实现图

    获取手机IMEI、宽、高、是否有SD卡,RAM、ROM、SD卡、是否联网、网络类型

    默认语言,设备名,型号、厂商、Fingerprint、Android 版本、SDK版本、Google 安全patch、发布时间、版本类型、用户名

    产品名、ID、产品名、主板名

    三、 获取手机设备 宽、高、IMEI 信息方法

    获取手机宽、高、IMEI信息方法如下:

        /**
         * 获取设备宽度(px)
         * 
         */
        public static int getDeviceWidth(Context context) {
            return context.getResources().getDisplayMetrics().widthPixels;
        }
    
        /**
         * 获取设备高度(px)
         */
        public static int getDeviceHeight(Context context) {
            return context.getResources().getDisplayMetrics().heightPixels;
        }
    
        /**
         * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限
         */
        public static String getIMEI(Context context) {
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            String deviceId = tm.getDeviceId();
            if (deviceId == null) {
                return "UnKnown";
            } else {
                return deviceId;
            }
        }
    

    注意:获取IMEI 需要获取手机状态权限

     <!-- 读取手机IMEI的设备权限 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    如果是Android 6.0 之后的代码请使用动态申请权限的方法申请权限,否认会报安全异常的错误SecurityException,进而导致运行报错。

    如需了解更多 系统安全权限的内容,请看 之前写的文章 Android 系统权限使用详解

    四、 获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名的方法

    获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名的方法如下:

        /**
         * 获取厂商名
         * **/
        public static String getDeviceManufacturer() {
            return android.os.Build.MANUFACTURER;
        }
    
        /**
         * 获取产品名
         * **/
        public static String getDeviceProduct() {
            return android.os.Build.PRODUCT;
        }
    
        /**
         * 获取手机品牌
         */
        public static String getDeviceBrand() {
            return android.os.Build.BRAND;
        }
    
        /**
         * 获取手机型号
         */
        public static String getDeviceModel() {
            return android.os.Build.MODEL;
        }
    
        /**
         * 获取手机主板名
         */
        public static String getDeviceBoard() {
            return android.os.Build.BOARD;
        }
    
        /**
         * 设备名
         * **/
        public static String getDeviceDevice() {
            return android.os.Build.DEVICE;
        }
    
        /**
         * 
         * 
         * fingerprit 信息
         * **/
        public static String getDeviceFubgerprint() {
            return android.os.Build.FINGERPRINT;
        }
    

    五、 获取手机硬件名、SDK版本、android版本 、语言支持、默认语言等方法

    获取手机硬件名、SDK版本android版本 、语言支持、默认语言等方法如下:

        /**
         * 硬件名
         * 
         * **/
        public static String getDeviceHardware() {
            return android.os.Build.HARDWARE;
        }
    
        /**
         * 主机
         * 
         * **/
        public static String getDeviceHost() {
            return android.os.Build.HOST;
        }
    
        /**
         * 
         * 显示ID
         * **/
        public static String getDeviceDisplay() {
            return android.os.Build.DISPLAY;
        }
    
        /**
         * ID
         * 
         * **/
        public static String getDeviceId() {
            return android.os.Build.ID;
        }
    
        /**
         * 获取手机用户名
         * 
         * **/
        public static String getDeviceUser() {
            return android.os.Build.USER;
        }
    
        /**
         * 获取手机 硬件序列号
         * **/
        public static String getDeviceSerial() {
            return android.os.Build.SERIAL;
        }
    
        /**
         * 获取手机Android 系统SDK
         * 
         * @return
         */
        public static int getDeviceSDK() {
            return android.os.Build.VERSION.SDK_INT;
        }
    
        /**
         * 获取手机Android 版本
         * 
         * @return
         */
        public static String getDeviceAndroidVersion() {
            return android.os.Build.VERSION.RELEASE;
        }
    
        /**
         * 获取当前手机系统语言。
         */
        public static String getDeviceDefaultLanguage() {
            return Locale.getDefault().getLanguage();
        }
    
        /**
         * 获取当前系统上的语言列表(Locale列表)
         */
        public static String getDeviceSupportLanguage() {
            Log.e("wangjie", "Local:" + Locale.GERMAN);
            Log.e("wangjie", "Local:" + Locale.ENGLISH);
            Log.e("wangjie", "Local:" + Locale.US);
            Log.e("wangjie", "Local:" + Locale.CHINESE);
            Log.e("wangjie", "Local:" + Locale.TAIWAN);
            Log.e("wangjie", "Local:" + Locale.FRANCE);
            Log.e("wangjie", "Local:" + Locale.FRENCH);
            Log.e("wangjie", "Local:" + Locale.GERMANY);
            Log.e("wangjie", "Local:" + Locale.ITALIAN);
            Log.e("wangjie", "Local:" + Locale.JAPAN);
            Log.e("wangjie", "Local:" + Locale.JAPANESE);
            return Locale.getAvailableLocales().toString();
        }
    
    

    六、 获取 SD 卡存储信息

    SD卡信息

    1.判断SD是否挂载方法

    判断SD是否挂载方法如下:

        /**
         * 判断SD是否挂载
         */
        public static boolean isSDCardMount() {
            return Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED);
        }
    

    2. 获取SD 存储信息的方法

    获取SD 存储信息的方法如下:

    /**
         * 获取手机存储 ROM 信息
         * 
         * type:用于区分内置存储于外置存储的方法
         * 
         * 内置SD卡 :INTERNAL_STORAGE = 0;
         * 
         * 外置SD卡:EXTERNAL_STORAGE = 1;
         * **/
        public static String getStorageInfo(Context context, int type) {
    
            String path = getStoragePath(context, type);
            /**
             * 无外置SD 卡判断
             * **/
            if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
                return "无外置SD卡";
            }
    
            File file = new File(path);
            StatFs statFs = new StatFs(file.getPath());
            String stotageInfo;
    
            long blockCount = statFs.getBlockCountLong();
            long bloackSize = statFs.getBlockSizeLong();
            long totalSpace = bloackSize * blockCount;
    
            long availableBlocks = statFs.getAvailableBlocksLong();
            long availableSpace = availableBlocks * bloackSize;
    
            stotageInfo = "可用/总共:"
                    + Formatter.formatFileSize(context, availableSpace) + "/"
                    + Formatter.formatFileSize(context, totalSpace);
    
            return stotageInfo;
    
        }
    

    3. 获取手机ROM (内置存储,外置存储)存储路径的方法

    获取手机ROM 存储信息的方法如下:

    /**
         * 使用反射方法 获取手机存储路径
         * 
         * **/
        public static String getStoragePath(Context context, int type) {
    
            StorageManager sm = (StorageManager) context
                    .getSystemService(Context.STORAGE_SERVICE);
            try {
                Method getPathsMethod = sm.getClass().getMethod("getVolumePaths",
                        null);
                String[] path = (String[]) getPathsMethod.invoke(sm, null);
    
                switch (type) {
                case INTERNAL_STORAGE:
                    return path[type];
                case EXTERNAL_STORAGE:
                    if (path.length > 1) {
                        return path[type];
                    } else {
                        return null;
                    }
    
                default:
                    break;
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取 手机 RAM 信息 方法 一
         * */
        public static String getTotalRAM(Context context) {
            long size = 0;
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(context.ACTIVITY_SERVICE);
            MemoryInfo outInfo = new MemoryInfo();
            activityManager.getMemoryInfo(outInfo);
            size = outInfo.totalMem;
    
            return Formatter.formatFileSize(context, size);
        }
    
        /**
         * 手机 RAM 信息 方法 二
         * */
        public static String getTotalRAMOther(Context context) {
            String path = "/proc/meminfo";
            String firstLine = null;
            int totalRam = 0;
            try {
                FileReader fileReader = new FileReader(path);
                BufferedReader br = new BufferedReader(fileReader, 8192);
                firstLine = br.readLine().split("\\s+")[1];
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (firstLine != null) {
    
                totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine)
                        / (1024 * 1024)).doubleValue()));
    
                long totalBytes = 0;
    
            }
    
            return Formatter.formatFileSize(context, totalRam);
        }
    
        /**
         * 获取 手机 可用 RAM
         * */
        public static String getAvailableRAM(Context context) {
            long size = 0;
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(context.ACTIVITY_SERVICE);
            MemoryInfo outInfo = new MemoryInfo();
            activityManager.getMemoryInfo(outInfo);
            size = outInfo.availMem;
    
            return Formatter.formatFileSize(context, size);
        }
    

    七、获取手机 RAM、ROM存储信息

    1.RAM:

    运行时内存,此大小直接决定手机运行的流畅度,相当于电脑内存。

    2.ROM :

    手机存储(分内置SD卡,外置SD卡),此大小直接决定着手机可以存储资源的大小,相当于电脑硬盘。

    以红米手机为例:
    RAM= 1904716KB= 1.82G

    红米4 手机 RAM、ROM存储信息

    红米4 memory 信息 meminfo

    3.获取 RAM存储信息的方法如下:

        /**
         * 获取 手机 RAM 信息
         * */
        public static String getRAMInfo(Context context) {
            long totalSize = 0;
            long availableSize = 0;
    
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(context.ACTIVITY_SERVICE);
    
            MemoryInfo memoryInfo = new MemoryInfo();
            activityManager.getMemoryInfo(memoryInfo);
            totalSize = memoryInfo.totalMem;
            availableSize = memoryInfo.availMem;
    
            return "可用/总共:" + Formatter.formatFileSize(context, availableSize)
                    + "/" + Formatter.formatFileSize(context, totalSize);
        }
    

    4. 获取手机ROM存储信息的方法如下:

    /**
         * 获取手机存储 ROM 信息
         * 
         * type:用于区分内置存储于外置存储的方法
         * 
         * 内置SD卡 :INTERNAL_STORAGE = 0;
         * 
         * 外置SD卡:EXTERNAL_STORAGE = 1;
         * **/
        public static String getStorageInfo(Context context, int type) {
    
            String path = getStoragePath(context, type);
            /**
             * 无外置SD 卡判断
             * **/
            if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
                return "无外置SD卡";
            }
    
            File file = new File(path);
            StatFs statFs = new StatFs(file.getPath());
            String stotageInfo;
    
            long blockCount = statFs.getBlockCountLong();
            long bloackSize = statFs.getBlockSizeLong();
            long totalSpace = bloackSize * blockCount;
    
            long availableBlocks = statFs.getAvailableBlocksLong();
            long availableSpace = availableBlocks * bloackSize;
    
            stotageInfo = "可用/总共:"
                    + Formatter.formatFileSize(context, availableSpace) + "/"
                    + Formatter.formatFileSize(context, totalSpace);
    
            return stotageInfo;
    
        }
    

    八、DeviceInfoUtils 封装类

    为了方便查询使用设备信息,小编已经封装成一个Utils类。代码如下:

    package com.programandroid.Utils;
    
    import java.util.Locale;
    
    import android.R.string;
    import android.content.Context;
    import android.telephony.TelephonyManager;
    import android.util.Log;
    
    /*
     * DeviceInfoUtils.java
     *
     *  Created on: 2017-11-16
     *      Author: wangjie
     * 
     *  Welcome attention to weixin public number get more info
     *
     *  WeiXin Public Number : ProgramAndroid
     *  微信公众号 :程序员Android
     *
     */
    public class DeviceInfoUtils {
    
        /**
         * 获取设备宽度(px)
         * 
         */
        public static int getDeviceWidth(Context context) {
            return context.getResources().getDisplayMetrics().widthPixels;
        }
    
        /**
         * 获取设备高度(px)
         */
        public static int getDeviceHeight(Context context) {
            return context.getResources().getDisplayMetrics().heightPixels;
        }
    
        /**
         * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限
         */
        public static String getIMEI(Context context) {
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            String deviceId = tm.getDeviceId();
            if (deviceId == null) {
                return "UnKnown";
            } else {
                return deviceId;
            }
        }
    
        /**
         * 获取厂商名
         * **/
        public static String getDeviceManufacturer() {
            return android.os.Build.MANUFACTURER;
        }
    
        /**
         * 获取产品名
         * **/
        public static String getDeviceProduct() {
            return android.os.Build.PRODUCT;
        }
    
        /**
         * 获取手机品牌
         */
        public static String getDeviceBrand() {
            return android.os.Build.BRAND;
        }
    
        /**
         * 获取手机型号
         */
        public static String getDeviceModel() {
            return android.os.Build.MODEL;
        }
    
        /**
         * 获取手机主板名
         */
        public static String getDeviceBoard() {
            return android.os.Build.BOARD;
        }
    
        /**
         * 设备名
         * **/
        public static String getDeviceDevice() {
            return android.os.Build.DEVICE;
        }
    
        /**
         * 
         * 
         * fingerprit 信息
         * **/
        public static String getDeviceFubgerprint() {
            return android.os.Build.FINGERPRINT;
        }
    
        /**
         * 硬件名
         * 
         * **/
        public static String getDeviceHardware() {
            return android.os.Build.HARDWARE;
        }
    
        /**
         * 主机
         * 
         * **/
        public static String getDeviceHost() {
            return android.os.Build.HOST;
        }
    
        /**
         * 
         * 显示ID
         * **/
        public static String getDeviceDisplay() {
            return android.os.Build.DISPLAY;
        }
    
        /**
         * ID
         * 
         * **/
        public static String getDeviceId() {
            return android.os.Build.ID;
        }
    
        /**
         * 获取手机用户名
         * 
         * **/
        public static String getDeviceUser() {
            return android.os.Build.USER;
        }
    
        /**
         * 获取手机 硬件序列号
         * **/
        public static String getDeviceSerial() {
            return android.os.Build.SERIAL;
        }
    
        /**
         * 获取手机Android 系统SDK
         * 
         * @return
         */
        public static int getDeviceSDK() {
            return android.os.Build.VERSION.SDK_INT;
        }
    
        /**
         * 获取手机Android 版本
         * 
         * @return
         */
        public static String getDeviceAndroidVersion() {
            return android.os.Build.VERSION.RELEASE;
        }
    
        /**
         * 获取当前手机系统语言。
         */
        public static String getDeviceDefaultLanguage() {
            return Locale.getDefault().getLanguage();
        }
    
        /**
         * 获取当前系统上的语言列表(Locale列表)
         */
        public static String getDeviceSupportLanguage() {
            Log.e("wangjie", "Local:" + Locale.GERMAN);
            Log.e("wangjie", "Local:" + Locale.ENGLISH);
            Log.e("wangjie", "Local:" + Locale.US);
            Log.e("wangjie", "Local:" + Locale.CHINESE);
            Log.e("wangjie", "Local:" + Locale.TAIWAN);
            Log.e("wangjie", "Local:" + Locale.FRANCE);
            Log.e("wangjie", "Local:" + Locale.FRENCH);
            Log.e("wangjie", "Local:" + Locale.GERMANY);
            Log.e("wangjie", "Local:" + Locale.ITALIAN);
            Log.e("wangjie", "Local:" + Locale.JAPAN);
            Log.e("wangjie", "Local:" + Locale.JAPANESE);
            return Locale.getAvailableLocales().toString();
        }
    
        public static String getDeviceAllInfo(Context context) {
    
            return "\n\n1. IMEI:\n\t\t" + getIMEI(context)
    
            + "\n\n2. 设备宽度:\n\t\t" + getDeviceWidth(context)
    
            + "\n\n3. 设备高度:\n\t\t" + getDeviceHeight(context)
    
            + "\n\n4. 是否有内置SD卡:\n\t\t" + SDCardUtils.isSDCardMount()
    
            + "\n\n5. RAM 信息:\n\t\t" + SDCardUtils.getRAMInfo(context)
    
            + "\n\n6. 内部存储信息\n\t\t" + SDCardUtils.getStorageInfo(context, 0)
    
            + "\n\n7. SD卡 信息:\n\t\t" + SDCardUtils.getStorageInfo(context, 1)
    
            + "\n\n8. 是否联网:\n\t\t" + Utils.isNetworkConnected(context)
    
            + "\n\n9. 网络类型:\n\t\t" + Utils.GetNetworkType(context)
    
            + "\n\n10. 系统默认语言:\n\t\t" + getDeviceDefaultLanguage()
    
            + "\n\n11. 硬件序列号(设备名):\n\t\t" + android.os.Build.SERIAL
    
            + "\n\n12. 手机型号:\n\t\t" + android.os.Build.MODEL
    
            + "\n\n13. 生产厂商:\n\t\t" + android.os.Build.MANUFACTURER
    
            + "\n\n14. 手机Fingerprint标识:\n\t\t" + android.os.Build.FINGERPRINT
    
            + "\n\n15. Android 版本:\n\t\t" + android.os.Build.VERSION.RELEASE
    
            + "\n\n16. Android SDK版本:\n\t\t" + android.os.Build.VERSION.SDK_INT
    
            + "\n\n17. 安全patch 时间:\n\t\t" + android.os.Build.VERSION.SECURITY_PATCH
    
            + "\n\n18. 发布时间:\n\t\t" + Utils.Utc2Local(android.os.Build.TIME)
    
            + "\n\n19. 版本类型:\n\t\t" + android.os.Build.TYPE
    
            + "\n\n20. 用户名:\n\t\t" + android.os.Build.USER
    
            + "\n\n21. 产品名:\n\t\t" + android.os.Build.PRODUCT
    
            + "\n\n22. ID:\n\t\t" + android.os.Build.ID
    
            + "\n\n23. 显示ID:\n\t\t" + android.os.Build.DISPLAY
    
            + "\n\n24. 硬件名:\n\t\t" + android.os.Build.HARDWARE
    
            + "\n\n25. 产品名:\n\t\t" + android.os.Build.DEVICE
    
            + "\n\n26. Bootloader:\n\t\t" + android.os.Build.BOOTLOADER
    
            + "\n\n27. 主板名:\n\t\t" + android.os.Build.BOARD
    
            + "\n\n28. CodeName:\n\t\t" + android.os.Build.VERSION.CODENAME
                    + "\n\n29. 语言支持:\n\t\t" + getDeviceSupportLanguage();
    
        }
    }
    
    

    九、SDCardUtils 封装类

    为了方便查询使用设备信息,小编已经封装成一个Utils类。代码如下:

    package com.programandroid.Utils;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.lang.reflect.Method;
    
    import android.app.ActivityManager;
    import android.app.ActivityManager.MemoryInfo;
    import android.content.Context;
    import android.os.Build;
    import android.os.Environment;
    import android.os.StatFs;
    import android.os.storage.StorageManager;
    import android.text.TextUtils;
    import android.text.format.Formatter;
    
    /*
     * SDCardUtils.java
     *
     *  Created on: 2017-11-22
     *      Author: wangjie
     * 
     *  Welcome attention to weixin public number get more info
     *
     *  WeiXin Public Number : ProgramAndroid
     *  微信公众号 :程序员Android
     *
     */
    public class SDCardUtils {
    
        private static final int INTERNAL_STORAGE = 0;
        private static final int EXTERNAL_STORAGE = 1;
    
        /**
         * 获取 手机 RAM 信息
         * */
        public static String getRAMInfo(Context context) {
            long totalSize = 0;
            long availableSize = 0;
    
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(context.ACTIVITY_SERVICE);
    
            MemoryInfo memoryInfo = new MemoryInfo();
            activityManager.getMemoryInfo(memoryInfo);
            totalSize = memoryInfo.totalMem;
            availableSize = memoryInfo.availMem;
    
            return "可用/总共:" + Formatter.formatFileSize(context, availableSize)
                    + "/" + Formatter.formatFileSize(context, totalSize);
        }
    
        /**
         * 判断SD是否挂载
         */
        public static boolean isSDCardMount() {
            return Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED);
        }
    
        /**
         * 获取手机存储 ROM 信息
         * 
         * type:用于区分内置存储于外置存储的方法
         * 
         * 内置SD卡 :INTERNAL_STORAGE = 0;
         * 
         * 外置SD卡:EXTERNAL_STORAGE = 1;
         * **/
        public static String getStorageInfo(Context context, int type) {
    
            String path = getStoragePath(context, type);
            /**
             * 无外置SD 卡判断
             * **/
            if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
                return "无外置SD卡";
            }
    
            File file = new File(path);
            StatFs statFs = new StatFs(file.getPath());
            String stotageInfo;
    
            long blockCount = statFs.getBlockCountLong();
            long bloackSize = statFs.getBlockSizeLong();
            long totalSpace = bloackSize * blockCount;
    
            long availableBlocks = statFs.getAvailableBlocksLong();
            long availableSpace = availableBlocks * bloackSize;
    
            stotageInfo = "可用/总共:"
                    + Formatter.formatFileSize(context, availableSpace) + "/"
                    + Formatter.formatFileSize(context, totalSpace);
    
            return stotageInfo;
    
        }
    
        /**
         * 使用反射方法 获取手机存储路径
         * 
         * **/
        public static String getStoragePath(Context context, int type) {
    
            StorageManager sm = (StorageManager) context
                    .getSystemService(Context.STORAGE_SERVICE);
            try {
                Method getPathsMethod = sm.getClass().getMethod("getVolumePaths",
                        null);
                String[] path = (String[]) getPathsMethod.invoke(sm, null);
    
                switch (type) {
                case INTERNAL_STORAGE:
                    return path[type];
                case EXTERNAL_STORAGE:
                    if (path.length > 1) {
                        return path[type];
                    } else {
                        return null;
                    }
    
                default:
                    break;
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取 手机 RAM 信息 方法 一
         * */
        public static String getTotalRAM(Context context) {
            long size = 0;
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(context.ACTIVITY_SERVICE);
            MemoryInfo outInfo = new MemoryInfo();
            activityManager.getMemoryInfo(outInfo);
            size = outInfo.totalMem;
    
            return Formatter.formatFileSize(context, size);
        }
    
        /**
         * 手机 RAM 信息 方法 二
         * */
        public static String getTotalRAMOther(Context context) {
            String path = "/proc/meminfo";
            String firstLine = null;
            int totalRam = 0;
            try {
                FileReader fileReader = new FileReader(path);
                BufferedReader br = new BufferedReader(fileReader, 8192);
                firstLine = br.readLine().split("\\s+")[1];
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (firstLine != null) {
    
                totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine)
                        / (1024 * 1024)).doubleValue()));
    
                long totalBytes = 0;
    
            }
    
            return Formatter.formatFileSize(context, totalRam);
        }
    
        /**
         * 获取 手机 可用 RAM
         * */
        public static String getAvailableRAM(Context context) {
            long size = 0;
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(context.ACTIVITY_SERVICE);
            MemoryInfo outInfo = new MemoryInfo();
            activityManager.getMemoryInfo(outInfo);
            size = outInfo.availMem;
    
            return Formatter.formatFileSize(context, size);
        }
    
        /**
         * 获取手机内部存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getTotalInternalMemorySize(Context context) {
            File file = Environment.getDataDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long blockSizeLong = statFs.getBlockSizeLong();
            long blockCountLong = statFs.getBlockCountLong();
            long size = blockCountLong * blockSizeLong;
            return Formatter.formatFileSize(context, size);
        }
    
        /**
         * 获取手机内部可用存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getAvailableInternalMemorySize(Context context) {
            File file = Environment.getDataDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long availableBlocksLong = statFs.getAvailableBlocksLong();
            long blockSizeLong = statFs.getBlockSizeLong();
            return Formatter.formatFileSize(context, availableBlocksLong
                    * blockSizeLong);
        }
    
        /**
         * 获取手机外部存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getTotalExternalMemorySize(Context context) {
            File file = Environment.getExternalStorageDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long blockSizeLong = statFs.getBlockSizeLong();
            long blockCountLong = statFs.getBlockCountLong();
            return Formatter
                    .formatFileSize(context, blockCountLong * blockSizeLong);
        }
    
        /**
         * 获取手机外部可用存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getAvailableExternalMemorySize(Context context) {
            File file = Environment.getExternalStorageDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long availableBlocksLong = statFs.getAvailableBlocksLong();
            long blockSizeLong = statFs.getBlockSizeLong();
            return Formatter.formatFileSize(context, availableBlocksLong
                    * blockSizeLong);
        }
    
        /**
         * 
         * SD 卡信息
         * */
    
        public static String getSDCardInfo() {
    
            SDCardInfo sd = new SDCardInfo();
            if (!isSDCardMount())
                return "SD card 未挂载!";
    
            sd.isExist = true;
            StatFs sf = new StatFs(Environment.getExternalStorageDirectory()
                    .getPath());
    
            sd.totalBlocks = sf.getBlockCountLong();
            sd.blockByteSize = sf.getBlockSizeLong();
            sd.availableBlocks = sf.getAvailableBlocksLong();
            sd.availableBytes = sf.getAvailableBytes();
            sd.freeBlocks = sf.getFreeBlocksLong();
            sd.freeBytes = sf.getFreeBytes();
            sd.totalBytes = sf.getTotalBytes();
            return sd.toString();
        }
    
        public static class SDCardInfo {
            boolean isExist;
            long totalBlocks;
            long freeBlocks;
            long availableBlocks;
            long blockByteSize;
            long totalBytes;
            long freeBytes;
            long availableBytes;
    
            @Override
            public String toString() {
                return "isExist=" + isExist + "\ntotalBlocks=" + totalBlocks
                        + "\nfreeBlocks=" + freeBlocks + "\navailableBlocks="
                        + availableBlocks + "\nblockByteSize=" + blockByteSize
                        + "\ntotalBytes=" + totalBytes + "\nfreeBytes=" + freeBytes
                        + "\navailableBytes=" + availableBytes;
            }
        }
    
        // add start by wangjie for SDCard TotalStorage
        public static String getSDCardTotalStorage(long totalByte) {
    
            double byte2GB = totalByte / 1024.00 / 1024.00 / 1024.00;
            double totalStorage;
            if (byte2GB > 1) {
                totalStorage = Math.ceil(byte2GB);
                if (totalStorage > 1 && totalStorage < 3) {
                    return 2.0 + "GB";
                } else if (totalStorage > 2 && totalStorage < 5) {
                    return 4.0 + "GB";
                } else if (totalStorage >= 5 && totalStorage < 10) {
                    return 8.0 + "GB";
                } else if (totalStorage >= 10 && totalStorage < 18) {
                    return 16.0 + "GB";
                } else if (totalStorage >= 18 && totalStorage < 34) {
                    return 32.0 + "GB";
                } else if (totalStorage >= 34 && totalStorage < 50) {
                    return 48.0 + "GB";
                } else if (totalStorage >= 50 && totalStorage < 66) {
                    return 64.0 + "GB";
                } else if (totalStorage >= 66 && totalStorage < 130) {
                    return 128.0 + "GB";
                }
            } else {
                // below 1G return get values
                totalStorage = totalByte / 1024.00 / 1024.00;
    
                if (totalStorage >= 515 && totalStorage < 1024) {
                    return 1 + "GB";
                } else if (totalStorage >= 260 && totalStorage < 515) {
                    return 512 + "MB";
                } else if (totalStorage >= 130 && totalStorage < 260) {
                    return 256 + "MB";
                } else if (totalStorage > 70 && totalStorage < 130) {
                    return 128 + "MB";
                } else if (totalStorage > 50 && totalStorage < 70) {
                    return 64 + "MB";
                }
            }
    
            return totalStorage + "GB";
        }
        // add end by wangjie for SDCard TotalStorage
    
    }
    

    至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除。同时感谢您的阅读,期待您的关注。

    展开全文
  • 关于Android获取Usb设备权限

    千次阅读 2020-11-27 15:54:40
    关于Android获取Usb设备权限 一、出现权限弹窗:拔插USB设备,弹出权限申请框,通过用户确认或拒绝权限。 二、USB授权方式:(参考google官方文档) minfest中进行权限配置 <manifest ...> ...

     

    一、出现权限弹窗:拔插USB设备,弹出权限申请框,通过用户确认或拒绝权限。

    二、USB授权方式:(参考google官方文档

    1. minfest中进行权限配置
      <manifest ...>
              <uses-feature android:name="android.hardware.usb.host" />
              <uses-sdk android:minSdkVersion="12" />
              ...
              <application>
                  <activity ...>
                      ...
                      <intent-filter>
                       <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
                      </intent-filter>
                      <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                          android:resource="@xml/device_filter" />
                  </activity>
              </application>
          </manifest>

       

    2. res/xml/device_filter.xml 配置文件为需要过滤设备的pid以及vid  

    <?xml version="1.0" encoding="utf-8"?>
     <resources>
       <usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" />
      </resources>
    

    3.注册广播以及建立广播接收,当监听到USB的插入动作时,通过UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)从 Intent 获取代表所连接设备:

    匹配是否为目的usb,使用usbManager.requestPermission(device, permissionIntent)获取权限弹窗,进行授权。

    .Java代码示例:

        private final String ACTION_USB_PERMISSION = "com.exmple.USB_PERMISSION";
        private static final int VID =1234 ;    
        private static final int PID = 5678;
        private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (ACTION_USB_PERMISSION.equals(action))//是否接收到自定义广播
                {
                    synchronized (this)
                    {
                        UsbDevice device = (UsbDevice)                 
                        intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                        if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))//是否授权成功
                        {
                            if(device != null){
                                openDevice();
                            }
    
                        }
                        else
                        {
                            Log.e("Rechar","device not permission, device info:" + device.toString());
                        }
                    }
                }
                else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
                {
                    
                    UsbDevice device = (UsbDevice) 
                    intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                    assert device != null;
                    if (VID == device.getVendorId() && PID == device.getProductId())
                        {
                            closeDevice();
                            openDeviceAndRequestDevice();
                        }
    
                }
                else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action))
                {
                   
                    UsbDevice device = (UsbDevice)             
                    intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                    assert device != null;
                    if (VID == device.getVendorId() && PID == device.getProductId())
                        {
                            closeDevice();
                        }
                }
            }
        };
    
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            IntentFilter filter = new IntentFilter();
            filter.addAction(ACTION_USB_PERMISSION);
            filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
            filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
            registerReceiver(mUsbReceiver, filter);//注册广播
        }
    
    
        @Override
        protected void onDestroy()
        {
            super.onDestroy();
            unregisterReceiver(mUsbReceiver);
    
        }
        private void openDeviceAndRequestDevice()
        {
            UsbManager usbManager = (UsbManager)this.getSystemService(Context.USB_SERVICE);
            for (UsbDevice device : usbManager.getDeviceList().values())
            {
                if (device.getVendorId() == VID && device.getProductId() == PID)
                {
                    Intent intent = new Intent(ACTION_USB_PERMISSION);//发送自定义广播
                    PendingIntent pendingIntent =     
                    PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
                    usbManager.requestPermission(device, pendingIntent);//弹出权限框,进行权限申请
                }
            }
        }
        private void openDevice()
        {
            Log.e("Rechar", "openDevice: " );
            Toast.makeText(this,"openDevice",Toast.LENGTH_LONG).show();
        }
        private void closeDevice()
        {
            Log.e("Rechar", "closeDevice: " );
            Toast.makeText(this,"closeDevice",Toast.LENGTH_LONG).show();
        }
    
    
    }

    4.以上已完成USB的授权。但在开发过程中发现usb-HID并不能弹出权限框,且自动拒绝了权限。分析了系统源码:先判断USB的权限,若没有会return ,再判断camera的权限若没有回return。因此在代码中加入camera的权限后获取到了权限弹框。系统源码如下:

     public void requestPermission(UsbDevice device, String packageName, PendingIntent pi, int uid) {
          Intent intent = new Intent();
    
            // respond immediately if permission has already been granted
          if (hasPermission(device, packageName, uid)) {
                intent.putExtra(UsbManager.EXTRA_DEVICE, device);
                intent.putExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true);
                try {
                    pi.send(mUserContext, 0, intent);
                } catch (PendingIntent.CanceledException e) {
                    if (DEBUG) Slog.d(TAG, "requestPermission PendingIntent was cancelled");
                }
                return;
            }
            if (isCameraDevicePresent(device)) {
                if (!isCameraPermissionGranted(packageName, uid)) {
                    intent.putExtra(UsbManager.EXTRA_DEVICE, device);
                    intent.putExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
                    try {
                        pi.send(mUserContext, 0, intent);
                    } catch (PendingIntent.CanceledException e) {
                        if (DEBUG) Slog.d(TAG, "requestPermission PendingIntent was cancelled");
                    }
                    return;
                }
            }
    
            // start UsbPermissionActivity so user can choose an activity
            intent.putExtra(UsbManager.EXTRA_DEVICE, device);
            requestPermissionDialog(intent, packageName, pi);
        }

    但是我暂时没有想明白,HID和camera的关系所在,系统代码为何这么写,希望知道的大佬指教一下。谢谢!附上当时参考usb流程解析的网站(usb流程解析),为了防止该网站内容被删除,将该内容附在下面以供参考:

    USB请求权限流程

     

    1. 新建activity,获取UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE)

    2. 获取所以的USB设备HashMap<String, UsbDevice> map = usbManager.getDeviceList()

    3. 过滤别的USB设备,拿到自己USB的USBDevice类,然后请求USB权限,usbManager.requestPermission(usbDevice, pendingIntent);并注册一个回调意图,用来判断用户是否授予权限

    4. UsbManager类的requestPermission方法会调用mService. requestDevicePermission

    5.mService是IUsbManager的对象,而IUsbManager是一个AIDL接口https://www.androidos.net.cn/android/8.0.0_r4/xref/frameworks/base/core/java/android/hardware/usb/IUsbManager.aidl

    UsbService是它的实现类,所以最终是调用的UsbService的requestDevicePermission方法

    6. 在requestDevicePermission方法里面调用的getSettingsForUser(userId).requestPermission

    7. getSettingsForUser(userId)其实是去获取UsbUserSettingsManager实例,所以是调用的UsbUserSettingsManager的requestPermission方法

    8. 在requestPermission方法里面首先会进行判断是否拥有USB权限,如果有就回调广播直接return返回的。如果没有那就判断是否有相机权限,如果没有权限回调广播直接return的。注意从始至终是没有发送用户拒绝的广播的

    9. 接着会调用自身的requestPermissionDialog方法,在requestPermissionDialog方法里面又会去调用mUsbPermissionManager.requestPermissionDialog方法

    10.最终在UsbPermissionManager类的requestPermissionDialog方法中调用startActivityAsUser 启动UsbPermissionActivity权限申请对话框

    11.监听弹出权限对话框的onclick方法,如果点击的授权,那就在UsbPermissionActivity的onDestory里面回调最开始的广播,通知我们的应用,用户授予的权限。

     

    展开全文
  • 安卓,获取设备id 1、添加 DeviceId.jar 至项目libs目录。 2、建议使用自定设备id,用户id信息不易泄露 String id1 = Device.getid(this); // 默认设备id值 String id2 = Device.getid(this, "scimence"); //...
  • 【React Native】获取设备信息

    千次阅读 2018-09-28 15:19:52
    一、获取方案 使用开源的第三方组件react-native-device-info,该组件适用于iOS和Android双平台。 npm地址:https://www.npmjs.com/package/react-native-device-info 二、组件使用 在ReactNative项目中下载第三...
  • 一、问题背景最近将app上传至华为应用市场时总是拒绝,其中有一条就是:我们发现您的应用提示获取手机存储敏感权限,用户不同意时强制退出应用,请参考审核指南......, 修改建议:请在用户不统一获取手机存储敏感权...
  • 在小米和VIVO的Android 10的版本上面,利用如下代码无法获取USB设备权限: private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private final BroadcastReceiver ...
  • 小程序提交审核和发布后,多种机型使用起来发现了一个问题,在小程序设置中没有显示具体的权限信息。如下图所示 当考虑到用户使用小程序时,若缺少对应权限,按照官方案例讲的方式是进行自动导航跳转“设置”页面...
  • Android动态获取存储权限

    万次阅读 2020-05-31 13:06:50
    Android动态获取存储权限一、前言二、动态获取权限三、举一反三四、参考资料: 一、前言 在开发中用到了SD卡的存储,在AndroidManifest.xml里开启后并不起作用。在执行需要权限的代码时就会出现:IOException: No ...
  • H5开发中,有的项目需要获取手机设备权限,如麦克风、视频。 具体实现 created() { if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator....
  • 最近有个需求,要获取设备唯一id,Android一直没有什么完善的方案获取设备唯一不变的id,我就结合了几种方案组成了一下: 1. 首先获取IMEI; IMEI获取失败后 2. 获取SN序列号,序列号失败后 3. 随机生成一串UUID...
  • Device模块管理设备信息
  • H5网页项目中有需要拍照、录音、视频等会需要获取手机设备权限。 具体实现 created() { if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator....
  • Android开发之 permission动态权限获取

    万次阅读 多人点赞 2019-08-19 10:57:20
    2、不指定权限则自动获取清单文件上的危险权限进行申请 3、如果动态申请的权限没有在清单文件中注册会抛出异常 4、支持大部分国产手机直接跳转到具体的权限设置页面 5、可设置被拒绝后继续申请,直到用户授权或者...
  • kali获取任意设备的位置信息

    千次阅读 2022-04-23 21:22:58
    kali获取位置信息
  • 华为手机root权限获取方法

    千次阅读 2021-06-05 01:20:40
    华为手机root权限获取方法华为作为品牌旗舰手机,受到很多用户的喜欢,很多内置软件都不怎么使用。这些内置软件要想删除,只能root权限获取。下面是jy小编整理的一些华为root权限获取教程。欢迎阅读。华为权限获取...
  • android获取设备唯一ID方法

    万次阅读 2020-07-31 15:46:37
    1、方案一IMEI ... 在Android 8.0(API Level 26)以下,可以通过TelephonyManager的getDeviceId()方法获取设备的IMEI码(其实这里的说法不准确,该方法是会根据手机设备的制式(GSM或CDMA)返回...
  • 获取Android 手机设备信息:操作系统版本号、手机分辨率、运营商、当前联网方式、IMEI、MEID、MAC地址 包括双卡机型上的两个IMEI信息 /** * Created by Administrator on 2019/5/15. * 手机详细信息 */ ...
  • 所谓读写者权限说白了就是对系统的读取权限和写入权限,一个软件想要在一个设备要写入某个文件获取读取某个文件,如果没有这个读写者权限是没办法操作的,所以想要继续操作就得获取这个权限才可以。有些人表示自己在...
  • 对于搭载 Android 10(API 级别 29)及更高版本的设备,系统将针对平台或其他应用在设备上执行的所有完整 WLAN 扫描发送此广播。应用可以使用广播被动监听设备上所有扫描的完成情况,无需发出自己的扫描。 使用 ...
  • 谷歌浏览器使用 navigator.mediaDevices.getUserMedia获取资源时报错 monitor.js:296 Uncaught TypeError: Cannot read property 'getUserMedia' of undefined 谷歌浏览器安全权限问题 我们可以通过一下方式解决:...
  • Android 获取 usb 权限

    千次阅读 2019-10-07 10:23:53
    文章目录前言:一、直接在AndroidManifest.xml文件中进行如下配置:二、动态代码获取2.1 代码中获取(前提是已经定位到要申请USB权限的usbdevice)2.2 注册广播接受者 前言: 最近工作上遇到几个USB模块在android平台...
  • ionic开发——获取手机设备信息

    万次阅读 2017-03-31 18:03:04
    2.在platform/android/AndroidManifest.xml中添加权限 在项目中获取的代码如下: device.model :返回设备的模型或产品的名称 device.cordova :返回cordova的版本 device.uuid :返回...
  • js获取浏览器摄像头和麦克风权限

    千次阅读 2021-02-12 12:38:14
    前言项目中会使用到摄像头或麦克风设备,这就需要我们获取浏览器的摄像头和麦克风权限权限是无法通过js操控的,必须由浏览器用户设置。下面我来告诉大家如何获取浏览器的摄像头或麦克风的权限,使浏览器弹出询问...
  • android之获取设备唯一标识符

    千次阅读 2019-09-02 09:09:40
    2、由于权限变更,刷机,重载安装等,将使得标识符失去唯一性,在此背景下,只能最大程度的由开发者自己根据各种IMEI、Mac adress、SN(设备序列号)等等,再通过不同的加密算法,生成一个极低冲突性的标识符串,然后...
  • Android 设备标识获取方案

    千次阅读 2022-03-30 22:22:31
    在APP开发过程中,不可避免...IMEI(International Mobile Equipment Identity number),国际移动设备识别码,与卡槽绑定,双卡设备会有两个,Android 10.0以后Google禁止APP获取该属性。 MEID MEID(Mobile Equipment Id
  • 获取adb root权限

    万次阅读 2018-06-18 12:40:41
    在开发中,难免在debug release版本时碰倒adb shell权限的问题, 比如QA突然急冲冲的拿着一台出问题的机器跑过来,当你要使用adb shell做一些测试时竟然发现没有
  • 如何获取Android设备唯一标识码教程

    千次阅读 2020-12-18 20:37:54
    它是一种互联网身份认证协议,其具有唯一性和信息不可否认性。ID是表示着标签的身份,在JS脚本中会用到id,当JS要修改一个标签的属性时,JS会将id名作为该标签的唯一标识进行操作。也就是说ID只是页面元素的标识,供...
  • 会要求读取电话、录音和设备信息等等,这样让APP获取了我们的软件权限后,大家是不是觉得自己的手机都变得不安全了,所以我们有必要在安装软件之后,再对这一些APP进行权限限制,下面我们就来分享一下手机设置应用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,092
精华内容 85,636
关键字:

怎么设置获取设备信息权限