<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Water_Marking的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Water_Marking</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Water_Marking]]></copyright><item><title><![CDATA[多应用共享数据的两种方式 - Settings.Global.putXxx 和 ContentProvider]]></title><link>https://blog.csdn.net/Water_Marking/article/details/142457483</link><guid>https://blog.csdn.net/Water_Marking/article/details/142457483</guid><author>Water_Marking</author><pubDate>Mon, 23 Sep 2024 16:34:33 +0800</pubDate><description><![CDATA[有需求：A 应用联网获取一时间戳，而B应用负责展示。为什么这么神奇，不直接在B应用中向服务端获取？别问，问就是业务导致。既然存在这么个需求，解决数据存储以及数据获取问题就可以了。如题所说，数据存储方案暂且介绍两种：Settings.Global.putXxx 和 ContentProvider。]]></description><category></category></item><item><title><![CDATA[浅谈 Android Tombstone（墓碑日志）分析步骤 - 02]]></title><link>https://blog.csdn.net/Water_Marking/article/details/131479664</link><guid>https://blog.csdn.net/Water_Marking/article/details/131479664</guid><author>Water_Marking</author><pubDate>Fri, 30 Jun 2023 19:15:22 +0800</pubDate><description><![CDATA[找到首个方法位置后，再看，这个链其实不长，而且墓碑日志记录很清晰，是 /vendor/bin/hw/android.hardware.camera.provider@2.4-service 发生了问题，因此接下来直接找链中最后一个方法调用，也就是 #00。结合 logd 日志，墓碑日志记录于 2023-06-19 23:47:31，logd 中最旧的日志记录的最早时间是 06-20 14:12:02.454747，所以前置操作日志已经被覆盖冲掉，无法参考 logd 日志分析问题。]]></description><category></category></item><item><title><![CDATA[浅谈 Android Tombstone（墓碑日志）分析步骤]]></title><link>https://blog.csdn.net/Water_Marking/article/details/131477114</link><guid>https://blog.csdn.net/Water_Marking/article/details/131477114</guid><author>Water_Marking</author><pubDate>Fri, 30 Jun 2023 16:23:42 +0800</pubDate><description><![CDATA[之所以称之为浅谈，也的确是实事求是了，因为一顿操作下来，即使找到了日志报错的位置，我好像还是解决不了问题，不得其道。这只是代码调用链中，位于链首的一个方法，不代表问题就是出在这里。按常理，这个时候我们需要使用上面的命令，将 #14 到 #00 整个调用链都完善出来，观察调用链中的层层调用，看看问题出在哪里，再确定一下这是不是一个值得关注的问题，以及这是一个什么问题，怎么解决这个问题。首先，要学会站在巨人的肩膀上处理问题，先看看别人都怎么处理的，对处理步骤有个脸熟，再上手操作，所谓先知道，再做到，再熟练。]]></description><category></category></item><item><title><![CDATA[Android.mk集成第三方jar与so的方法]]></title><link>https://blog.csdn.net/Water_Marking/article/details/107089264</link><guid>https://blog.csdn.net/Water_Marking/article/details/107089264</guid><author>Water_Marking</author><pubDate>Thu, 02 Jul 2020 17:27:07 +0800</pubDate><description><![CDATA[参考：https://blog.csdn.net/wonderful_eastar/article/details/48441761?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.no]]></description><category></category></item><item><title><![CDATA[Android SDK 开发 - sdk 中依赖第三方jar 包的情况]]></title><link>https://blog.csdn.net/Water_Marking/article/details/103973478</link><guid>https://blog.csdn.net/Water_Marking/article/details/103973478</guid><author>Water_Marking</author><pubDate>Tue, 14 Jan 2020 15:39:56 +0800</pubDate><description><![CDATA[SDK 开发的时候遇到了这么一种场景：
   视频通话 SDK 的核心 jar 包由第三方公司提供，我们团队在这个 jar 包的基础上包装一层，我们团队会把包装后的 SDK 提供给其他公司的第三方开发人员，供他们开发视频通话功能。

在这个场景下，前提：
   假设视频通话核心 jar 包名字是 a.jar ；
   我们的工程中有三个库模块：分别是库模块 b 、库模块 ...]]></description><category></category></item><item><title><![CDATA[Android 项目实战之 - 快速搭建项目框架 (四) MVVM 框架模型]]></title><link>https://blog.csdn.net/Water_Marking/article/details/103593819</link><guid>https://blog.csdn.net/Water_Marking/article/details/103593819</guid><author>Water_Marking</author><pubDate>Wed, 18 Dec 2019 10:57:38 +0800</pubDate><description><![CDATA[搭建MVVM 框架模型前，得知道几个Google 的原生组件： DataBinding 、ViewModel 和 LiveData 分别是什么，解决了什么问题，怎么使用这几个组件。

    首先关于DataBinding 的使用，根据 慕课网 和 博客 DataBinding使用全面详解 ，总结了这个样例：



    然后关于组件 ViewModel 和 ...]]></description><category></category></item><item><title><![CDATA[Android 项目实战之 - 快速搭建项目框架 (三) MVP 框架模型]]></title><link>https://blog.csdn.net/Water_Marking/article/details/103593793</link><guid>https://blog.csdn.net/Water_Marking/article/details/103593793</guid><author>Water_Marking</author><pubDate>Wed, 18 Dec 2019 10:56:58 +0800</pubDate><description><![CDATA[MVP 框架模型



以上是 MVP 框架模型。






]]></description><category></category></item><item><title><![CDATA[Android 项目实战之 - 快速搭建项目框架 (二) MVC 框架模型]]></title><link>https://blog.csdn.net/Water_Marking/article/details/103593668</link><guid>https://blog.csdn.net/Water_Marking/article/details/103593668</guid><author>Water_Marking</author><pubDate>Wed, 18 Dec 2019 10:51:34 +0800</pubDate><description><![CDATA[MVC 框架模型

以上是MVC 框架模型。


]]></description><category></category></item><item><title><![CDATA[Android 项目实战之 - 快速搭建项目框架 (一) 概述]]></title><link>https://blog.csdn.net/Water_Marking/article/details/103562447</link><guid>https://blog.csdn.net/Water_Marking/article/details/103562447</guid><author>Water_Marking</author><pubDate>Mon, 16 Dec 2019 14:44:31 +0800</pubDate><description><![CDATA[一般我们很少自己去搭建项目（包括普通应用 和 SDK）基础框架，都是接过项目之后去维护已有的工程代码 - 可以正常跑起来并根据新需求添加新的功能。但是如果一旦新开启了一个项目，那基础的框架之类的还是需要我们自己去搭建实现。现在在这里基于实践，把遇到的好的基础框架记录下来。

【1】基于实战，在搭建 APP 框架的时候，通用架构框架：

（1）MVC 框架模型。（MVC）

（2）M...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 系统应用开发之 - 修改 Settings 中 存储空间相关]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102919865</link><guid>https://blog.csdn.net/Water_Marking/article/details/102919865</guid><author>Water_Marking</author><pubDate>Tue, 05 Nov 2019 17:38:23 +0800</pubDate><description><![CDATA[Android 8.1.0 原生系统，Settings 中，点击 “存储” 查看内存使用时，发现内存使用情况都是使用 GB 做的单位，但是如果某一类型文件实在是太小了，比如照片和视频中只有100KB 左右大小，如果还是使用 GB 作为计算格式的话，那最终显示出来的就只是0GB 了，这样不方便用户对自己内存空间有详细的了解，如下：


修改前





所以，我们优化一下当前界...]]></description><category></category></item><item><title><![CDATA[Android 开发实用工具类：删除指定目录下指定格式文件（计算指定目录下指定格式文件总大小）]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102729043</link><guid>https://blog.csdn.net/Water_Marking/article/details/102729043</guid><author>Water_Marking</author><pubDate>Thu, 24 Oct 2019 18:35:40 +0800</pubDate><description><![CDATA[开发的时候我们可能会遇到一些需求：遍历删除指定目录下的指定格式的文件。

    这里提供一个工具类，其对外暴露三个参数，参数一：要删除的文件目录的路径，参数二：区分是前缀还是后缀，参数三：具体前缀或者后缀字符规则。删除的时候，先枚举出路径目录下的所有文件，枚举的同时实现一个FilenameFilter接口的类，可以自定义规则，比说前缀、后缀或者其他规则，枚举的同时将我们的...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 源码修改之 - 屏蔽 Camera2 应用中的录像按钮]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102629498</link><guid>https://blog.csdn.net/Water_Marking/article/details/102629498</guid><author>Water_Marking</author><pubDate>Fri, 18 Oct 2019 17:38:25 +0800</pubDate><description><![CDATA[这个需求说起来挺奇葩，为什么这么讲，因为Camera2本来就是用来拍照录像，就只因为当前系统预置应用 Camera2 在录像的时候，很容易出现各种奇怪问题，还不好定位并解决，然后产品说：把Camera2 里面的录像功能给屏蔽了吧。胳膊拧不过大腿，改吧。

    需要修改


folder\packages\apps\Camera2\src\com\android\came...]]></description><category></category></item><item><title><![CDATA[Android 任意位置（指空间上的位置）弹出 Toast]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102592005</link><guid>https://blog.csdn.net/Water_Marking/article/details/102592005</guid><author>Water_Marking</author><pubDate>Wed, 16 Oct 2019 18:54:01 +0800</pubDate><description><![CDATA[今天在学习同事写的代码的时候，发现一个很有意思的东西，可以在Android 设备的任意位置（指的是空间上的任意位置）弹出来 Toast。

    首先在layout 目录下新建一个布局文件 custom_toast.xml，里面按照下面写：


&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout
  ...]]></description><category></category></item><item><title><![CDATA[Android 中检查是否被授予相应的权限]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102590599</link><guid>https://blog.csdn.net/Water_Marking/article/details/102590599</guid><author>Water_Marking</author><pubDate>Wed, 16 Oct 2019 17:58:29 +0800</pubDate><description><![CDATA[1.声明所需要的权限：


private final static int PERMISSIONS_OK = 10001;    
private static String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permissi...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 之在 Settings 中隐藏指定的应用信息]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102588506</link><guid>https://blog.csdn.net/Water_Marking/article/details/102588506</guid><author>Water_Marking</author><pubDate>Wed, 16 Oct 2019 17:05:59 +0800</pubDate><description><![CDATA[之所以会有这个需求，是因为之前做过在 Launcher3 中隐藏应用图标。之前虽然在 Launcher 中隐藏了应用图标，但是依次点击"设置 - 应用和通知 - 查看所有的应用" ，还是可以看到这些被隐藏掉应用图标的应用信息，所以我们还得在这里做一下过滤：在显示所有应用的时候，按照应用的包名，把需要隐藏的应用给过滤掉。主要是修改下面：


apps/Settings/re...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 Service 中怎么弹出 Activity]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102572355</link><guid>https://blog.csdn.net/Water_Marking/article/details/102572355</guid><author>Water_Marking</author><pubDate>Tue, 15 Oct 2019 18:37:06 +0800</pubDate><description><![CDATA[场景：在Service 中开启线程下载升级包，当下载完系统升级包，弹出新的 Activity 提示用户进行后续操作。

像在Activity 中打开Activity 中一样，不需要额外操作。



---

最后，这是我写的简单 demo，参考一下。

//地址（等有空了传上去）
...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 判断系统当前顶部 Activity 是不是 目标 Activity]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102572138</link><guid>https://blog.csdn.net/Water_Marking/article/details/102572138</guid><author>Water_Marking</author><pubDate>Tue, 15 Oct 2019 18:17:13 +0800</pubDate><description><![CDATA[当前是基于Android 8.1.0，在不同的版本，方法有可能表现不一样。

    没有足够测试机，没有进行适配。


    private boolean ifTargetActivityIsTop(Context context, String targetAppPackageName, String targetAppActivityName) {
     ...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 Service 中怎么弹出 Dialog]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102570579</link><guid>https://blog.csdn.net/Water_Marking/article/details/102570579</guid><author>Water_Marking</author><pubDate>Tue, 15 Oct 2019 18:03:34 +0800</pubDate><description><![CDATA[场景：在Service 中开启线程下载升级包，当下载完系统升级包，弹出一个Dialog 提示用户。

    注意，Android 系统版本不一样，可能会有不一样的表现。当前是基于 Android 8.1.0 的 Service 中弹 Dialog。



    首先，就是要在功能清单列表中声明权限，以下两个都必须声明：


    &lt;uses-permi...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 Service 中怎么弹出 Toast]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102563551</link><guid>https://blog.csdn.net/Water_Marking/article/details/102563551</guid><author>Water_Marking</author><pubDate>Tue, 15 Oct 2019 11:29:19 +0800</pubDate><description><![CDATA[本来想在一个文章里面记录一下在 Service 中弹出 Toast、Dialog、Activity （基于Android 8.1.0），最后还是决定分开单独写一下。因为看起来觉得这只是一点点的知识点，现在你如果在网络上搜索怎么在 Service 中弹出 Toast、Dialog、Activity ，能找到的博客一般都是有问题的。

    首先这篇文章是根据我的理解，记...]]></description><category></category></item><item><title><![CDATA[Android 8.1.0 获取当前界面中最上层的 Activity]]></title><link>https://blog.csdn.net/Water_Marking/article/details/102554819</link><guid>https://blog.csdn.net/Water_Marking/article/details/102554819</guid><author>Water_Marking</author><pubDate>Mon, 14 Oct 2019 19:27:39 +0800</pubDate><description><![CDATA[/**
     * Check if target Activity is on top.
     * @param context
     * @param targetAppPackageName
     * @param targetAppActivityName
     * @return
     */
    private boolean isTargetActi...]]></description><category></category></item></channel></rss>