精华内容
下载资源
问答
  • 发现了一个问题,就是当插入大小分别128G、64G、32G、16G、8G、4G的SD,格式化SD作为内部存储后,在设置下128G的SD合并总容量显示256G、64G的SD显示128G,32G的SD显示32G、16G的SD显示32G、8G的SD...

    发现了一个问题,就是当插入大小分别为128G、64G、32G、16G、8G、4G的SD卡,格式化SD卡作为内部存储后,在设置下128G的SD卡合并总容量显示256G、64G的SD卡显示128G,32G的SD卡显示32G、16G的SD卡显示32G、8G的SD卡显示8G、4G的SD卡显示4G。

    看到这问题,当即想到的就是显示问题,因为google之前计算内存的方法有的是按照1024的,有的是按照1000的,很乱,不出问题才怪,后面的9.0、10.0就好多了

    不多说什么,直接上代码

     /**
         * Round the given size of a storage device to a nice round power-of-two
         * value, such as 256MB or 32GB. This avoids showing weird values like
         * "29.5GB" in UI.
         *
         * @hide
         */
        public static long roundStorageSize(long size) {
            long val = 1;
            long pow = 1;
            // Modify by HZH on 2019/12/6 start
            // while ((val * pow) < size) {
            long realpow = 1;
            while ((val * realpow) < size) {
                val <<= 1;
                if (val > 512) {
                    val = 1;
                    pow *= 1000;
                    realpow *= 1024;
                }
            }
            // Modify by HZH on 2019/12/6 end
            return val * pow;
        }

    按照上面修改即可,根本还是换算单位的问题

    展开全文
  • Android的存储的分为:内部存储外部存储(SDCard、移动U盘等)内部存储内部存储指的是App的内部存储空间,路径通常:/data/data//...,Android中的SharedPreferences、database、so库文件等都存放于此。...
    ce070832b5e4543fe954a6b40976c216.png

    Android的存储的分为:

    • 内部存储
    • 外部存储(SDCard、移动U盘等)

    内部存储:内部存储指的是App的内部存储空间,路径通常为:/data/data//...,Android中的SharedPreferences、database、so库文件等都存放于此。

    1. /data/data//cache:缓存部分APP运行中产生的临时文件
    2. /data/data//databases:数据库默认的生成目录(可以通过重写ContextWrapper修改)
    3. /data/data//files:App项目的assets中的文件
    4. /data/data//lib:存放so库文件
    5. /data/data//shared_prefs:存放SharedPreferences产生的xml文件
    6. /data/data//app_webview:webView的缓存目录(HTML5使用的LocalStorage也是存放于此)

    外部存储:外部存储指的是Android手机自身扩展的存储空间或者外部插入SDCard的存储空间,路径通常为:/storage/sdcard、/mnt/sdcard、/storage/emulated/0、/sdcard等,这些路径全部都是指向同一个存储空间地址。

    在访问外部存储时,需要声明SDCard的读写权限。

    < uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" />

    < uses-permission android:name ="android.permissions.READ_EXTERNAL_STORAGE" />

    存储数据路径的选择:

    会随着App的删除而移除的数据,会被系统设置中的“数据清理”功能所清除。此时应该选用私有目录

    1.内部存储:/data/data//...2.外部存储: /storage/emulated/0/Android/data//...  1.内部存储:context.getFilesDir()、context.getCacheDir()等2.外部存储:context.getExternalFilesDir(type)、context.getExternalCacheDir()等 

    注意点:由于内部存储空间有限,较大的文件应该优先缓存在外部存储的项目私有目录中。

    共享给系统其它App且不随App删除而移除的文件。此时选用公共目录

    外部存储:/storage/emulated/0/type外部存储:Environment.getExternalStoragePublicDirectory(type)

    其中的type指的是Android系统提供的标准目录类型(其实就是文件夹名称):

    - android.os.Environment.DIRECTORY_MUSIC //音乐存放的标准目录- android.os.Environment.DIRECTORY_PODCASTS //系统广播存放的标准目录- android.os.Environment.DIRECTORY_RINGTONES //系统铃声存放的标准目录- android.os.Environment.DIRECTORY_ALARMS // 系统提醒铃声存放的标准目录。- android.os.Environment.DIRECTORY_NOTIFICATIONS //系统通知铃声存放的标准目录- android.os.Environment.DIRECTORY_PICTURES //图片存放的标准目录- android.os.Environment.DIRECTORY_DCIM //相机拍摄照片和视频的标准目录- android.os.Environment.DIRECTORY_MOVIES //电影存放的标准目录- android.os.Environment.DIRECTORY_DOCUMENTS //文档- android.os.Environment.DIRECTORY_DOWNLOADS //下载的标准目录E

    END

    展开全文
  • Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。一般我们存储内容都会放在外部存储空间里...

    Android存储

    Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。一般我们存储内容都会放在外部存储空间里。

    先判断SD卡是否可用,可用时优先使用SD卡的存储,不可用时用内部存储。
    存储在SD卡上时,可以在SD卡上新建任意一个目录存放,也可以存放在应用程序内部文件夹,区别是在SD卡的任意目录存放时内容不会随应用程序的卸载而消失,而在应用程序内部的内容会随应用程序卸载消失。
    一般缓存文件放在应用程序内部,用户主动保存的文件放在SD卡上的文件夹里。

    存储路径 一般我们可以通过 Context 和 Environment 相关的方法获取文件存取的路径。

    1.内部存储

    1.1 根目录/data,通过 Environment.getDataDirectory() 获取。
    1.2 应用程序目录r/data/包名(不一定,不同设备可能不同)
    应用缓存目录:/cache,通过Context.getCacheDir()获取。
    应用文件目录:/files,通过Context.getFilesDir()获取。Context.getFileStreamPath(String name)返回以name为文件名的子文件目录,若name为空,则返回文件根目录。假设我们的应用程序包名为com.pfj.demo,路径如下:

    Environment.getDataDirectory():      /data
    Context.getCacheDir():               /data/data/com.pfj.demo/cache
    Context.getFilesDir():               /data/data/com.pfj.demo/files
    Context.getFileStreamPath(""):       /data/data/com.pfj.demo/files
    Context.getFileStreamPath("test"):   /data/data/com.pfj.demo/files/test
    

    2.外部存储

    2.1 根目录 /storage/emulated/0,通过 Environment.getExternalStorageDirectory() 获取。
    2.2 应用程序目录/Andorid/data/包名
    应用缓存目录/cache,通过Context.getExternalCacheDir()获取。
    应用文件目录/files,通过Context.getExternalFilesDir(String type),type为空字符串时获取。type系统给我们提供了很多常用的类型:

    public static String DIRECTORY_MUSIC = "Music";
    public static String DIRECTORY_ALARMS = "Alarms";
    public static String DIRECTORY_NOTIFICATIONS = "Notifications";
    public static String DIRECTORY_PICTURES = "Pictures";
    public static String DIRECTORY_MOVIES = "Movies";
    public static String DIRECTORY_DOWNLOADS = "Download";
    public static String DIRECTORY_DCIM = "DCIM";
    public static String DIRECTORY_DOCUMENTS = "Documents";
    

    假设我们的应用程序包名为com.pfj.demo,路径如下:

    Environment.getExternalStorageDirectory():/storage/emulated/0
    Context.getExternalCacheDir(): /storage/emulated/0/Android/data/com.pfj.demo/cache
    Context.getExternalFilesDir(""):/storage/emulated/0/Android/data/com.pfj.demo/files
    Context.getExternalFilesDir("test"):/storage/emulated/0/Android/data/com.pfj.demo/files/test
    Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES):
    /storage/emulated/0/Android/data/com.pfj.demo/files/Pictures
    

    2.3 公共存储目录:

    我们可以在外部存储上新建任意文件夹,在6.0及之后的系统需要动态申请权限,这些目录的内容不会随着应用的卸载而消失。如:

    Environment.getExternalStorageDirectory(): /storage/emulated/0
    Environment.getExternalStoragePublicDirectory(""): /storage/emulated/0
    Environment.getExternalStoragePublicDirectory("test"): /storage/emulated/0/test
    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)/storage/emulated/0/Pictures
    

    参考链接

    展开全文
  • 判断外部储存卡

    2014-12-11 16:16:50
    判断是否有外部储存卡,如果有选择外部存储卡路径,没有默认内部储存卡路径。
  • 文件数据储存内部储存

    万次阅读 2019-03-01 13:28:30
    内部储存:Android的内部储存位于系统中,是在手机内存中的文件,!!!不是SD(外部存储器)中的文件。内部储存文件默认的存放位置是data/data/files目录下,并且是私有的(private)。可以把它设置为公有的...

    Android官方API:在设备内存中存储私有数据。
    内部储存:Android的内部储存位于系统中,是在手机内存中的文件,!!!不是SD卡(外部存储器)中的文件。内部储存文件默认的存放位置是data/data/files目录下,并且是私有的(private)。可以把它设置为公有的(public),则可以被其他的App访问。当一个应用卸载后,内部储存中的文件会被删除。
    使用:内部储存空间十分有限,主要存放系统本身和系统应用的程序的数据,如SharedPreferences,SQLite数据库,普通应用应该尽量避免使用它。

    下面主要了解3个文件夹:
    在这里插入图片描述
    核心原理:
    Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name)与 FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。具体有以下值可选:

    • MODE_PRIVATE:默认操作模式,表示该文件为私有数据,只能被应用本身访问,在此模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可 以使用Context.MODE_APPEND

    • MODE_APPEND:该模式比较人性化,它会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

    • MODE_WORLD_READABLE:当前文件可被其他应用读取。!!

    • MODE_WORLD_WRITEABLE:当前文件可被其他应用写入。!!

    !!官方API提示:自 API 级别 17 以来,常量 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 已被弃用。从 Android N 开始,使用这些常量将会导致引发 SecurityException。这意味着,面向 Android N 和更高版本的应用无法按名称共享私有文件,尝试共享“file://”URI 将会导致引发 FileUriExposedException。 如果您的应用需要与其他应用共享私有文件,则可以将 FileProvider 与 FLAG_GRANT_READ_URI_PERMISSION 配合使用。

    下面介绍一下data文件夹:
    打开data文件夹(没有root的手机不能打开该文件夹),里边会有两个文件夹。
    (1)app文件夹,存放着所有安装的App的Apk文件。
    (2)data文件夹(内部存储),包括以下内容。

    • data/data/包名/shared_prefs:使用Sharedpreferenced将数据持久化存储于本地,存在这个文件夹中的xml文件里。
    • data/data/包名/databases:App里的数据库文件
    • data/data/包名/files:普通数据
    • data/data/包名/cache:缓存文件,手机内存不足时,会自动删除这里的数据。

    Android系统提供了设备内部存储文件的读写操作API,完成文件的创建、内容的读出和写入(包括添加\修改)等。
    读取一个内部存储的私有文件的步骤如下。

    • (1)调用openFilelnput(String filename),参数中填入文件名,会返回一个FileInputstream对象。
    • (2)使用FileInputstream流对象的read()方法读取字节。
    • (3)调用流的close()方法关闭流。

    写入内部存储文件需要先获得一个文件的输出流,然后以write()的方式把待写入的信息写入到这个输出流中,最后关闭流。具体步骤如下。

    • (1)使用Context.openFileOutput(string name,int mode)方法,填入文件名和操作模式,获取FileOutputStream 对象.
    • (2)把待写入的内容通过write()方法写入到FileOutputStream 对象中。
    • (3)使用FileOutputStream 对象的close()关闭流。

    其他文件操作方法如下。

    • getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录
    • File getFilesDir():获本文件系统的绝对路径。
    • String[] fileList():当前应用内部存储路径下的所有文件名。
    • boolean deleteFile(String name)删除一个指定文件名为name的文件。
    • File getDir():在内部存储空间中创建或打开一个已经存在的目录。

    下面主要介绍一下文件主要操作类的方法
    !!!在调用当前对象的Context后:

    1. 保存内容到内部储存器中
    在这里插入图片描述
    可复制代码:

      //保存内容到内部服务器中
        public void save(String filename, String content)throws IOException{
            //FileoutputStream myfos=context.openFileoutput(filename,Context.MODE_PRIVATE);
            File file= new File(context.getFilesDir(), filename);
            FileOutputStream myfos= new  FileOutputStream(file);
            myfos.write(content.getBytes());
            myfos.close();
        }
    

    2. 通过文件名来获取内容
    在这里插入图片描述
    可复制代码:

      /**
         * 通过文件名来获取内容
         * @param filename 文件名称
         * @return 文件内容
         */
        public String get(String filename) throws IOException {
            FileInputStream fis = context.openFileInput(filename);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] data = new byte[1024];
            int len = -1;
            while ((len = fis.read(data)) != -1) {
                baos.write(data, 0, len);
            }
            return new String(baos.toByteArray());
        }
    

    3.使用追加的方式在文件的末尾添加内容
    在这里插入图片描述
    可复制代码:

     /**
         * 使用追加的方式在文件的末尾添加内容
         * @param filename 文件名
         *@param content 追加的内容
         */
        public void append(String filename, String content) throws IOException{
            FileOutputStream myfos= context.openFileOutput(filename, Context.MODE_APPEND);
               myfos.write(content.getBytes());
               myfos.close();
        }
    

    4.删除文件
    在这里插入图片描述
    可复制代码:

     /**
         *删除文件
         * @param filename 文件名
         * @return 是否成功
         */
        public boolean delete(String filename) {
            return context.deleteFile(filename);
        }
    

    5.获取内部存储路径下的所有文件名
    在这里插入图片描述
    可复制代码:

    /**
     * 获取内部存储路径下的所有文件名
     *@return 文件名数组
     */
           public  String [] queryAllfile(){
               return context.fileList();
           }
    

    Java文件如下:

    public class Internalstorage {
    
        private Context context;
    
        public Internalstorage(Context context) {
            this.context = context;
        }
        //保存内容到内部服务器中
        public void save(String filename, String content)throws IOException{
            //FileoutputStream myfos=context.openFileoutput(filename,Context.MODE_PRIVATE);
            File file= new File(context.getFilesDir(), filename);
            FileOutputStream myfos= new  FileOutputStream(file);
            myfos.write(content.getBytes());
            myfos.close();
        }
        /**
         * 通过文件名来获取内容
         * @param filename 文件名称
         * @return 文件内容
         */
        public String get(String filename) throws IOException {
            FileInputStream fis = context.openFileInput(filename);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] data = new byte[1024];
            int len = -1;
            while ((len = fis.read(data)) != -1) {
                baos.write(data, 0, len);
            }
            return new String(baos.toByteArray());
        }
        /**
         * 使用追加的方式在文件的末尾添加内容
         * @param filename 文件名
         *@param content 追加的内容
         */
        public void append(String filename, String content) throws IOException{
            FileOutputStream myfos= context.openFileOutput(filename, Context.MODE_APPEND);
               myfos.write(content.getBytes());
               myfos.close();
        }
        /**
         *删除文件
         * @param filename 文件名
         * @return 是否成功
         */
        public boolean delete(String filename) {
            return context.deleteFile(filename);
        }
    /**
     * 获取内部存储路径下的所有文件名
     *@return 文件名数组
     */
           public  String [] queryAllfile(){
               return context.fileList();
           }
        }
    
    展开全文
  • 华为Mate 9支持扩展储存卡吗华为Mate 9支持TF卡(microSD卡)。关于华为Mate 9支持扩展储存卡吗的疑问,下面将做详细的解答。标准版的华为Mate9沿用了5.9英寸屏幕尺寸,仍旧配备1080P屏幕,同时取消了保时捷版本了...
  • 华为的EMUI阉割过的系统无法使用Android自带的“将应用移至SD”(据说是Android6以上的版本移除了功能),华为的系统也出了名的严格,几乎找不到破解的方法…… 其他厂商如一加,小米等刷机方便的系统还好,可以...
  • 用过MIUI系统的朋友可能会发现这样一个现象,当使用过一段时间后,系统的内部储存空间会变得越来越少,而且占用空间90%以上时,系统还会经常发出无足够内存空间的提示,尽管我们尝试过清理垃圾、移动软件到SD、...
  • Android内部存储和外部存储,参考http://blog.csdn.net/sinat_32955803/article/details/51259556...内部存储┐ 系统存储├─物理位置是位于手机内部的非易失性存储器上,就是俗称的ROM(机身内存),他们三个分别位于
  • 本次实例是将用户的设置信息,以实体类媒介,保存到内部存储或者SD的文件里。再次打开应用时,程序会自动调用文件中实体类,并对设置信息进行设置,使其恢复到用户最终保存的状态。 首先,创建一个实体类(这里...
  • 将用户的设置信息,以实体类媒介,保存到内部存储或者SD的文件里。再次打开应用时,程序会自动调用文件中实体类,并对设置信息进行设置,使其恢复到用户最终保存的状态。 首先,创建一个实体类(这里要实现 ...
  • 内部存储 SD存储 三级缓存内部存储SD存储三级缓存 内部存储 //可存储多种类型数据 //参数一 xml文件的名字 参数二 模式 MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读写 SharedPreferences ...
  • getTotalBytes接口中: /frameworks/base/services/usage/java/com/android/server/usage/StorageStatsService.java...if(volumeUuid==StorageManager.UUID_PRIVATE_INTERNAL){ -returnFileUtils.roundStorageSize(m...
  • Internal Storage内部存储空间 所谓的内部存储与外部存储,是指是否是手机内置。手机内置的存储空间,称为内部存储,它是手机一旦出厂就无法...这里应该是手机内部存储的简称为内存,而并非严格意义上的内存)。 ...
  • android 6.0sd卡内部存储 & 外部存储

    万次阅读 2016-05-30 20:42:05
    android6.0 把sd可以设置内部存储。 一、fatab文件匹配 我们先来看下,vold的main函数: main函数在创建了VolumeManager后,调用了如下函数: if (process_config(vm)) { PLOG(ERROR) ...
  • 一、内存内部存储、外部存储概述4.4以下,机身存储就是内部存储,外部存储就是SD。我们通过getDataDirectory就可以获取内部存储根路径,通过getExternalStorageDirectory就可以获取外置SD卡根路径。4.4以上,...
  • 今天小编就大家分享一篇Android ndk获取手机内部存储卡的根目录方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 小米的地位越来越具优势,低价高配已经成为了小米手机的代言词,799元的红米手机最能说明问题,红米手机已经销售了有一段时间了,随之而来的一些小问题让用户有些头疼,其中包括无法将外置SD设定默认存储的Bug,...
  • 内部存储空间和外部存储空间,这些名称是在Android早期确定,那时大部分设备都提供内置的非易失性内存 (内部存储空间)以及可移动存储媒介 (如Micro SD,提供外部存储空间),现在很多设备将永久性存储空间划分单独的...
  • 内部存储空间 手机存储空间 sd

    千次阅读 2015-10-16 15:49:08
    有些手机(如MTK平台)分内部存储空间和手机存储空间,据说内部存储空间只是给装软件用的,而手机存储空间类似内置的SD,这样分经常导致安装软件时,明明有空间,但是还是装不下。请问什么要这样分呢?有什么...
  • 1,获取内置存储和外置SD的方法类 /** * 获取外置SD路径 * * 返回的数据:paths.get(0)肯定是外置SD的位置,因为它是primary external storage. * * @return 所有可用于存储的不同的卡的位置,用一个...
  • 几年前,Android引入了使用外部存储作为内部存储的功能,但这将SD和手机联系在一起。 如果出现问题,您将可以取回上的所有数据。如果将SD或USB驱动器格式化为内部存储设备,则手机的原始存储设备和添加的存储...
  • 觉得十分有必要搞清楚内存内部存储和外部存储的区别,还有我们在开发中真正将数据存在了手机的哪儿。 先提一个问题:手机设置的应用管理中,每个App下都有清除数据和清除缓存,清除的分别是哪里的数据? 一内存...
  • 原标题:MacOS从安卓设备内部存储和SD恢复已删除的文件Apeaksoft Android Toolkit for mac是一款安装在Mac电脑上的安卓数据恢复软件,不仅可以恢复手机中的数据,也可以恢复手机SD中的数据,对于许多情况下删除...
  • 根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念。 相对其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,...
  • 但有些开发者对这两个存储区域理解还够透彻,以为手机内置的存储(不可手机移除)就是内部存储, 可插拔的SD就是外部存储,其实这些理解都是有误的。这个知识点本人也重复看过好几次,但每次看完,过一段时间就...
  • 2G和16G同时出现在一个手机中,2G是指运行内存,16G是指存储内存。手机的内存,分两种,一个是存储内存,相当于电脑的硬盘,一般手机参数里超过4G的都是指这个。存储内存是可以扩展的。如果手机支持插卡就可以扩展。...
  • 觉得十分有必要搞清楚内存内部存储和外部存储的区别,还有我们在开发中真正将数据存在了手机的哪儿。 先提一个问题:手机设置的应用管理中,每个App下都有清除数据和清除缓存,清除的分别是哪里的数据?
  • stm32f407探索者开发板用内部温度传感器采集数据,通过按键KEY0写入SD,按几次,数据写入几次

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,453
精华内容 40,181
关键字:

内存卡设置为内部存储