精华内容
下载资源
问答
  • Android官方开发文档中有一篇文档来介绍如何保存应用数据, 但笔者用过很多程序(从知名的到不知名的)处理的都不是很完美,或者没有按照Android开发团队建议的方式去保存他们应用数据。当一些试用过的软件卸载...

    在Android官方开发文档中有一篇文档来介绍如何保存应用的数据, 但笔者用过很多程序(从知名的到不知名的)处理的都不是很完美,或者没有按照Android开发团队建议的方式去保存他们应用的数据。当一些试用过的软件卸载后,在SDCard中还保留了这些软件的文件目录,时间一长就有很多目录需要手工去清理,并且很难确认那些目录是仍然在使用的那些目录已经没用了,给用户带来困扰。这里我们来讨论下该如何正确的保存应用的数据。

    首先数据分为两种:和应用相关的数据;和应用无关的数据。这里分别介绍:

    应用无关的数据是那些用户比较关心的数据,不管您的应用在不在用户设备上,这些数据用户都希望保留,这些数据包含:用相机拍摄的照片、用浏览器(下载工具)下载的文件、用户制作的个性铃声等。

    假设您开发了一个照相应用(例如: 360相机),用户用您的应用拍摄并处理过的照片就属于应用无关的数据,如果用户把您的应用给卸载了,用户还是会期望仍然保留他们拍摄并处理过的照片。这里的照片按照Android官方的建议应该保存到 DIRECTORY_PICTURES 目录中,该目录通过Environment.getExternalStoragePublicDirectory(String type)来获取,您可以在该目录下创建一个以您的程序命名的目录来保存数据。其他支持的目录列表请参考这里。

    应用相关的数据: 这种数据只和您的应用相关,如果您的应用被用户删除了这些数据也没有理由还存在用户设备中。这种数据包含:数据库文件、属性配置文件、应用的缓存文件等。这种数据可以有很多种保存方式,详情参考这里。

    这里我们只讨论在API 8(Android 2.2)中新引入了一种保存到外部存储空间的伪私有数据API, 通过函数getExternalFilesDir() 来获取该路径,同样可以设置获取各种类型数据的参数,例如 DIRECTORY_MUSIC 和 DIRECTORY_RINGTONES (如果参数为null则返回您应用数据的跟目录)。比如一个应用的包名为 org.goodev.test 的应用,通过函数getExternalFilesDir(Environment.DIRECTORY_MOVIES)获取到的文件路径为 /storage/sdcard0/Android/data/org.goodev.test/files/Movies。

    细心的读者已经发现,该数据目录为SDCard (外部存储设备,有可能是内置SDCard 比如 Nexus S) 中名字为 Android 的根目录下,该目录下有个用来保存应用数据的 data 目录,在这个 data 目录中保存了设备中各个应用的数据,依包名来命名,如果设置参数为null则返回的是跟目录:/storage/sdcard0/Android/data/org.goodev.test/files。

    为啥这个目录我们称之为伪私有数据目录呢? 因为在2.2以上的系统中,当您的应用被用户卸载的时候,保存在这个目录下的数据也会被系统删除;并且在默认情况下多媒体扫描器不会扫描该目录下的图片、 MP3等多媒体文件– 从这个角度看这个目录是应用的私有数据目录。 由于该目录存在于外部存储空间中,任何其他具有读写外部存储空间权限的应用都可以访问您的应用数据 — 从这个角度看这些数据又不是私有的。 所以我们就称之为 伪私有数据。

    那么为什么Android在2.2中引入这种伪私有数据保存方式呢? 这样应用的数据不是很不安全吗? 这种存储方式适合保存那些数据呢? 下面我们来逐个分析下这些问题:

    为何引入这种存储方式?

    有些Android应用在使用过程中,可能会产生很多需要保存的文件数据,而这些数据需要在应用卸载的时候被删除掉,按照2.2之前的方式,这种 需求的数据只能保存到内部存储空间中,而系统的内部存储空间都是有限的,为了让用户能在有限的存储空间中安装更多的应用,所以出现了这种存储方式。

    存储在伪私有目录的数据是不是很不安全?

    当然是不安全的,任何应用都有可能访问这些数据,所以一般而言这里只保存那些不是非常敏感的数据,由于这些目录中的数据有可能被用户或者其他应用删除掉,所以在使用这里面的数据的时候要先检测下数据是否存在、有效,如果无效则需要从新下载使用。

    这种存储方式适合那些数据呢?

    比如一个图片浏览类的应用,用该目录来保存系统图片的缩略图方便提高应用浏览图片的流畅度;或者图书类应用用来保存图书的封面图片等。

    如果您的应用运行在旧的设备(低于2.2的版本)上,则您也应该按照上面的建议把文件保存到 /Android/data//files/ 目录下,这样如果用户更新的设备版本后,这些数据就随着应用的卸载而被删除掉了。

    遗留问题

    当然也有一些比较有争议的数据,比如 IM聊天软件接收到的图片和自定义表情数据 应该保存到SDCard中呢还是上面介绍的 伪私有数据 存储目录中呢? 如果用户卸载了聊天软件,用户是否期望继续保存他们接收到的图片和自定义表情图片呢? 这个问题恐怕针对不同的用户得到的答案是不一样的。这时,我们咋办??

    个人建议针对这种没有明确界限的需求,可以在用户第一次使用程序的时候,引导用户去设置他们的这些数据保存到哪里?保存到外部存储空间(应用卸载 后数据依然存在);或者保存到应用外部存储目录中(应用卸载后数据自动删除)。 这种做法类似下载一些PC软件的做法,比如一些软件在卸载的时候会填出对话框让用户选择是否保留用户数据。只不过在Android系统中卸载应用目前没办 提供该功能,所以只能在应用第一次使用的时候 让用户知道有这么个设置项。

    PS:笔者目前最反感的就是一些应用下载了很多小图片到SDCard中,然后打开图库应用会发现里面有很多这种小图片(比如人的头像啦、物品缩略 图啦、图书封面图片啦),这种数据就不应该出现在用户的图库应用中去。 如果把这些数据保存到上述的伪私有数据目录中则 就不会出现这种问题。 目前为了避免这种问题,笔者不得不自己在各种目录中创建“.nomedia”文件。相当繁琐啦!

    【编辑推荐】

    【责任编辑:Pockey TEL:(010)68476606】

    点赞 0

    展开全文
  • 作者:Selena Komez10月30,2018更新对于任何平台上的所有Android设备所有者而言,备份Android应用程序文件可能都是最重要的事情之一。 您永远不会知道何时会出问题,并且不想在此类事件发生时丢失您的App数据。备份...

    作者:Selena Komez10月30,2018更新

    对于任何平台上的所有Android设备所有者而言,备份Android应用程序文件可能都是最重要的事情之一。 您永远不会知道何时会出问题,并且不想在此类事件发生时丢失您的App数据。备份Android App数据后,您可以将备份的App数据还原到Android,以防万一丢失。多种在Android上备份您的App数据的方法。在本指南中,我们将向您展示如何在Android手机上轻松备份和还原WhatsApp App的数据,文本,通话记录,媒体文件,甚至您的文档。

    如何备份和恢复Android App数据

    Android的数据恢复 是Android用户的基本解决方案之一在Android上备份和恢复应用数据它可以从Android备份很多东西,包括应用程序,系统设置,短信/彩信/ iMessages,通话记录,照片,视频和其他各种类型的文件。程序使用起来相当简单,只需要几个完成整个任务的分钟。它支持将备份文件恢复到Android只需一次点击,高效。好吧,试试Android数据恢复,我们可以用它将Android数据从Android手机移动到电脑,我们也可以使用它也可以在Android手机上恢复App数据。让我们看看它是如何工作的。

    108ddfdc23ac8f637fedb2492d27d9a9.png6e916b333e1f0947d30d49dba84dd752.png

    部分1:将Android应用程序数据备份到计算机

    步骤1.Preparation运行程序之前

    1。 确保您的Android手机使用20%电池,以完成以下步骤。

    2。 检查USB电缆是否可行。

    在Android上执行步骤2.Enable USB调试

    运行程序,然后选择“ Android数据备份和还原”功能。如果是第一次将Android手机连接到计算机,则应在手机上单击“允许”。

    e4d26126d5e304f82f177255d33e1d8d.png

    035c4a5b665495293a2eb5a34912ba77.png

    注意:如果您之前在设备上启用了USB调试,则可以跳过此步骤。

    之后,您将看到如下所示的窗口。然后,您可以单击“备份”开始备份过程。

    c6d342cf7c47c0191c7b9011ebcd91dc.png

    步骤3。选择要备份的文件类型

    现在,从下面的界面中单击“应用程序数据”以备份您的Android应用程序数据。旁边有一个蓝色的小图标,供您单击并选择应用程序类型。选择后,单击“确定”,然后单击单击“备份”按钮开始复制过程。

    e9540624a2fa6fe4299b63ad30807a58.png

    备份过程完成后,您可以通过单击“查看备份”来详细检查备份文件。

    108ddfdc23ac8f637fedb2492d27d9a9.png6e916b333e1f0947d30d49dba84dd752.png

    部分2:从备份恢复Android App数据

    备份Android设备后,可以根据需要恢复备份文件。

    步骤1.Connect Android和查看备份历史记录

    如上所述,连接您要还原应用程序数据的手机。然后勾选“还原”开始。将Android成功连接到PC后,将出现如下界面。然后,应单击“查看”以预览宝贵的备份文件。然后选择要获取数据的文件并开始还原。

    dcfeec27af01d6ad7ae8db6ce8ab1ad2.png

    在Android上步骤2.Preview和Restore App Data

    现在,您可以在从以下界面选择要还原的应用程序数据之前先对其进行详细预览。单击“还原”按钮,然后将数据提取到您的Android中。

    abc857ab75390c12817287e1613d7167.png

    注意:从备份还原数据时,应用程序中已添加到设备的任何新信息都将被覆盖。如果确认继续,请单击“是”。

    13b99ed73c8666d4d9fb1fab07672fba.png

    总而言之,你会更好做一个Android备份 经常避免在意外情况下发生数据丢失。

    108ddfdc23ac8f637fedb2492d27d9a9.png6e916b333e1f0947d30d49dba84dd752.png

    相关文章:

    待评价

    提示:你需要 登录 在你评论之前。

    还没有账号。 请点击这里 寄存器.

    b57bf3940ecb788cabb0f5f259307e1d.gif

    b57bf3940ecb788cabb0f5f259307e1d.gif

    b57bf3940ecb788cabb0f5f259307e1d.gif

    b57bf3940ecb788cabb0f5f259307e1d.gif

    b57bf3940ecb788cabb0f5f259307e1d.gif (尚无评分)

    0997c28f9f791ca134873789f968f1db.gif载入中...

    展开全文
  • IT之家 5 月 19 日消息 据外媒 xda-developers 报道,近年来,谷歌一直在打击 Android 系统中的剪贴板访问,并在发布 Android 10 时禁止后台应用读取剪贴板数据。在最新的 Android 12 中,谷歌引入了一项设置,每当...

    IT之家 5 月 19 日消息 据外媒 xda-developers 报道,近年来,谷歌一直在打击 Android 系统中的剪贴板访问,并在发布 Android 10 时禁止后台应用读取剪贴板数据。

    在最新的 Android 12 中,谷歌引入了一项设置,每当应用访问用户的剪贴板时,就会弹出一个窗口,即使该应用位于前台。

    今年 4 月,外媒报道称谷歌计划引入一项新的通知,当应用访问剪贴板时会通知用户。启用该功能后,“显示剪贴板访问权限”将“在应用访问您复制的文本、图像或其他内容时显示一条消息”。

    谷歌在今日的“Android 新增功能”演讲中确认了这一功能,并表示可以在 Android 12 Beta 2 中试用。

    abbe66ff5cf25d7183a7d31f80606f7b.png

    ▲图源:xda-developers

    在大多数情况下,该功能似乎并不是很有用,因为剪贴板访问已经被限制在前台应用中,但它将在调查应用行为时派上用场。其效果可能类似于 Android 10 的后台位置访问通知功能,该功能凸显了 Instagram 和其他应用偷偷获取位置数据的频率。

    IT之家了解到,剪贴板访问通知也是 ‌iOS 14‌ 的全新隐私功能之一。在 iOS 14 系统中,苹果在 iPhone 和 iPad 的顶部引入了一个小横幅。当应用程序访问剪贴板的内容时,iOS 14 会通知用户。该功能揭示了 Twitter、Zilow 和其他应用悄悄访问剪贴板的频率。目前尚不清楚谷歌是否会像苹果在 iOS 14 中一样,默认在 Android 12 中启用提醒功能。

    展开全文
  • fantouch..5该命令pm clear com.android.browser需要root权限.所以,先跑su.以下是示例代码:private static final String CHARSET_NAME = "UTF-8";String cmd = "pm clear com.android.browser";ProcessBuilder pb = ...

    fantouch..

    5

    该命令pm clear com.android.browser需要root权限.

    所以,先跑su.

    以下是示例代码:

    private static final String CHARSET_NAME = "UTF-8";

    String cmd = "pm clear com.android.browser";

    ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true).command("su");

    Process p = pb.start();

    // We must handle the result stream in another Thread first

    StreamReader stdoutReader = new StreamReader(p.getInputStream(), CHARSET_NAME);

    stdoutReader.start();

    out = p.getOutputStream();

    out.write((cmd + "\n").getBytes(CHARSET_NAME));

    out.write(("exit" + "\n").getBytes(CHARSET_NAME));

    out.flush();

    p.waitFor();

    String result = stdoutReader.getResult();

    班级StreamReader:

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.util.concurrent.CountDownLatch;

    class StreamReader extends Thread {

    private InputStream is;

    private StringBuffer mBuffer;

    private String mCharset;

    private CountDownLatch mCountDownLatch;

    StreamReader(InputStream is, String charset) {

    this.is = is;

    mCharset = charset;

    mBuffer = new StringBuffer("");

    mCountDownLatch = new CountDownLatch(1);

    }

    String getResult() {

    try {

    mCountDownLatch.await();

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    return mBuffer.toString();

    }

    @Override

    public void run() {

    InputStreamReader isr = null;

    try {

    isr = new InputStreamReader(is, mCharset);

    int c = -1;

    while ((c = isr.read()) != -1) {

    mBuffer.append((char) c);

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (isr != null)

    isr.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    mCountDownLatch.countDown();

    }

    }

    }

    展开全文
  • 我有一个Android应用程序,可以在少量文件中存储大约25-40K的私有应用程序数据。 默认情况下,系统将这些文件存储在目录/ data / data /’my app package’/ files中。 当用户进入“设置 – >应用程序 – >...
  • Android 有四大存储方式:sqlite 、File、SharedPreferences、ContentProvider,而说到跨应用之间的数据共享,很多人可能会想到用ContentProvicer,不过个人觉得ContentProvider还是有点麻烦,如果可以,不妨试试...
  • 系统提供了以下几种保存应用数据的选项。 应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感...
  • 第2部分:MobileTrans Android App和App数据传输MobileTrans Phone Transfer是一键式手机到手机的简单传输流程,可帮助用户在Android和iOS操作系统之间移动数据。使用MobileTrans的另一种方法是将Android手机备份到...
  • Android官方开发文档中有一篇文档来介绍如何保存应用数据, 但笔者用过很多程序(从知名的到不知名的)处理的都不是很完美,或者没有按照Android开发团队建议的方式去保存他们应用数据。当一些试用过的软件卸载...
  • 安卓内置数据库中的数据对应 data/data/应用包名/databases/数据库名称 路径下的数据内容2.图片加载框架中图片的磁盘缓存3.SharePrefenerce中一些简单的基本类型的数据存储暂时只知道这些。缓存计算主要就是计算对应...
  • 在我们日常的开发过程中,我们的app经常需要缓存一些...使用SharedPreference来进行缓存,缓存的位置在/data/data/xxx.xxx.xxx/shared_prefs中。xxx.xxx.xxx是你的包名。2.使用sqlite来进行缓存,缓存的数据在/da...
  • Android 使用ContentProvider在应用间共享数据题图 www.gratisography.com在开发的过程中,有时会有...并实现相关的接口,其他的应用就可以通过uri来访问相关的数据,在Android中最常见的内容提供者就是MediaProv...
  • Android四种数据存储的应用方式作为一个完整的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、文件存储、SQLite、 Content Provider。对这几种方式的...
  • Android的每个应用程序,都有自己的可控的目录。在Setting/Application info里面,可以看到每个应用程序,都有Clear data和Clear cache选项。 具体这些目录在哪里呢?用adb连接上设备。如果是连接真实设备,需要有...
  • 第1部分:5个免费的Android数据恢复应用程序1.Recuva智能手机或平板电脑用户的一个非常普遍的问题是他们往往最终会在设备上意外删除,丢失或损坏文件。Recuva是专为数据恢复而设计的工具,最适合安卓设备,有助于...
  • 1、getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上;方法的第二个参数指定文件的操作模式,共有六种操作模式。六种操作模式分别为:1). MODE_...
  • android 这是我系列中有关在Android应用程序中存储的第二篇文章。 其他帖子可以在这里找到: ... 这篇文章是关于从Android应用程序保存到文件的,这是存储数据的最简单方法。 在很多情况...
  • 一种Android应用程序隐私数据泄露离线检测方法【专利摘要】本发明公开了一种Android应用程序隐私数据泄露离线检测方法,包括以下步骤,定义隐私数据;定制基于动态污点检测的Android系统,为不同类型的隐私数据添加...
  • 您必须使用相同的sharedUserId声明您的应用程序,例如:package=...在这种情况下,存储在两个应用程序的私有存储中的所有数据将彼此可用(假设它们已使用相同的...
  • 谷歌的安卓系统虽然用户量非常庞大但备份功能却非常差,重新安装系统或者应用泄露后数据就可能会永久丢失。苹果的iOS系统里在此前更新中已增加卸载不删除数据的功能 ,重新安装应用数据可以立即启用从而恢复使用。...
  • 应用中,可能会在当跳转到另外一个Activity的时候需要传递数据过去,这时就可能用Bundle对象;在MainActivity中,有一个导航至BActivity的Intent,Intent{Intent intent = new Intent(Context context, Class> ...
  • 摘要:Android智能手机中存储着用户的隐私数据,这些隐私数据泄露,会使用户...因此,本文针对Android应用程序隐私数据泄露特征,提出相应的隐私泄露检测方法,并设计实现Android应用程序隐私数据泄露检测系统.主要研究及...
  • Android 应用的一大优点就是他们能够相互通信和融合。...在本篇幅中,将介绍通过 `Intent` 对象使用 `Android Sharesheet` 和 `Intent Resolver` 在应用之间发送和接收简单的数据(例如文本、图片、文件)通用方法。
  • adb - 清除android应用程序用户d使用adb shell清除应用程序数据adb shell pm clear com.android.browser但是从应用程序执行该命令时String deleteCmd = "pm clear com.android.browser";Runtime runtime = Runtime....
  • 现在很多手机都内置备份程序,但只能备份简单的联系人、信息之类的数据,手机应用数据是没办法备份的。所以不少人在换机之前都会使用钛备份对手机进行root操作,再对手机进行全备份(包括应用数据)。不过问题又来了,...
  • 帮助开发者查看目标应用所有数据 优势 独立App查看目标应用所有数据。 代码侵入只有一行: AndroidManifest.xml中配置相同android:sharedUserId 原理 android:sharedUserId 两个应用共用一个userid,可以互相读取...
  • 我想实现一个扩展android.net.TrafficStats来测量每个APN或每个APN每个应用程序的数据流量.方法原型如下所示:getInterfaceTxPackets(String interface)getInterfaceRxPackets(String interface)getInterfaceTxBytes...
  • Android应用内部存储之应用文件缓存的重点在最后总结,如果想快速学习,直接查看最后总结。 在向手机上保存数据,一般是把数据保存在sdcard中的。大部分应用是直接在sdcard的根目录下创建一个文件夹,然后把数据保存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 506,539
精华内容 202,615
关键字:

安卓应用数据位置