- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 android 开发的新手,对大多数人来说可能是一个简单的问题,但似乎无法在 Internet 上找到答案。
如果我想为我构建的应用程序提供包含新图像和声音的附加包,最好的解决方案是什么。我试图阅读内容提供者,但问题多于答案。我有几个问题:
根据所选主题,我希望我的原始插件和新插件都可以在应用中访问。
谢谢。
最佳答案
在我开始实现之前,让我先回答你的问题:)
1) 不。 .apk 文件一旦创建就无法修改其内容。这是因为该应用程序经过数字签名以防止恶意代码在应用程序内标记自身。2) 因此,您有两个选项来存储任何自定义插件。 1) External Storage (ie the user's SD Card) or internal storage (ie the phone memory) 每个应用程序至少有两个我知道在手机内存中的文件夹,一个是数据库(这就是为什么你可以修改sqllite数据库),另一个用于通用文件。由于这些文件在编译时不是“已知”的,因此您无法通过 R.drawable 访问它们。3) 好吧,鉴于以上信息,我认为您可能想要表格中的图像名称:)
那么,现在让我们在这里更具体一点。我只是想抛出一些关于如何实现这个项目的粗略想法。当然,您可以根据自己的需要随意调整它。
对于初学者,我会决定在哪里放置插件。每个位置都有起伏。如果插件存储在本地内存中,无论用户是否有 SD 卡,您的主题都将可用。但另一方面,许多用户似乎提示应用占用大量手机内存空间,即使有时他们是下载大量额外内容的人。使用 SD 卡方式,您可能应该在手机内存中保留对默认主题或基本插件的引用,这样如果他们的 SD 卡无法安装或无法安装,至少会有一些东西在那里。在尝试从那里加载任何内容之前,请确保先检查 SD 卡是否存在。将它放在 SD 卡上的一个好处是用户可以轻松地直接从他们的计算机下载插件并将它们直接放入应用程序文件夹中。我个人会推荐这种方式,但请确保您的 Android Manifest 文件包含该权限,否则! :)
需要注意的是,将应用程序移至 SD 卡(Android 2.2 中的一项功能)与将文件放入 SD 卡之间存在差异。移动到 SD 卡上的应用程序仍然具有可用相同方式访问的“内部存储”,但实际位置在 SD 卡上。起初我很难理解的是,移动到 SD 卡的应用程序的功能与在手机内存中的功能相同。如果您打算将所有内容都保存在手机内存中,了解这一点很重要,因为 Android 2.1 用户可能会提示尺寸太大,而 2.2 用户可以将其移动到 SD 卡中。 (这也是你应该在android list 文件中设置的东西)
所以要考虑的另一件事是如何引用每个主题。首先,谁将制作这些插件?任何对制作插件感兴趣的人都可以访问模板吗?如果您希望插件系统更加公开,那么您可能希望对您的存储有一种目录结构类型的感觉
-themes
|
---MyTheme
|
-----icon.jpg
-----blah.mp3
----- ... and so forth
有了它,您可以强制执行严格的命名约定,或者您可以允许他们想要的任何名称,但要求他们将其列在您要解析的 XML 文件中。我认为严格的命名系统是一种稍微好一点的方法。也许这仍然可以包含一个 XML 文件以获取额外信息(根据需要)无论哪种方式,它将在未来节省大量时间以保持插件整洁有序。
我现在真的有点累,因为现在已经是深夜了,但这里有一些很好的读物,可以帮助您在这个问题上朝着正确的方向前进。
http://developer.android.com/guide/topics/data/data-storage.html
http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
http://www.jondev.net/articles/Unzipping_Files_with_Android_%28Programmatically%29
最后一点要注意的是,ContentProvider
用于在应用程序之间发送数据,在持久数据存储方面确实无效。 ;)
关于Android - 应用程序的附加主题(图像、声音等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369104/
这个问题已经有答案了: Cannot create AlertDialog: AppCompat error (2 个回答) 已关闭 6 年前。 当我在列表项中调用警报对话框时,我的应用程序崩溃了。我
我在 Angular 应用程序中安装了 Material UI,现在我收到错误,没有导出的成员 Observable 错误, 我删除了节点模块并重新安装,问题仍然存在 ERROR in node_mo
我有一个架构,其中有两个独立的应用程序。原始来源是一个sql数据库。 App1 监听 CDC 表以跟踪对该数据库中表的更改、规范化和序列化这些更改。它获取这些序列化消息并将它们发送到 Kafka 主题
这个问题在这里已经有了答案: Material Design, AppCompat, and Backwards Compatibility (1 个回答) 关闭 6 年前。 我收到如下错误信息:
我喜欢新 Office 套件和 Visual Studio 上的窗口镶边: 当然,我仍在为 Windows 7 开发应用程序,但我想知道是否有一种快速且简单的方法(阅读:WPF 样式或 Windows
我正在使用 HoloEverywhere-1.6.8。 我有一个基于 Holo.Theme 的自定义主题。 ... 我遇到了下面的崩溃,但它只出现在以下设备上: Galaxy Tab 10.1 P
我正在尝试为 Angular 的 DevExtreme 小部件加载主题。我采用了不同的方法: 在 angular.json 中设置样式但不会产生任何影响: "projects": { "my-proj
我想定义一个 android 样式,它扩展了一个在不同的应用程序/包中定义的样式,而不是作为库导入。 从对android资源的xml引用的定义here : @[:]/ 似乎可以在定义资源的地方指定一个
我正在尝试测试一种制作主题的方法,但我使用的方法并没有给我预期的结果。这是我的设置: drawable/dummy.xml 值/mythemes.xml @style
通过 telnet 使用 IMAP,我希望能够从特定的给定电子邮件中提取主题。现在我知道 fetch 命令负责从电子邮件中获取数据。 我的问题是,如何在不使用对 BODY[HEADER.FIELDS
我刚刚开始使用 RStudio 中的一些新的 knitr 功能。 我已经尝试在 R Markdown 设置对话框中选择几个不同的主题,但这些似乎对我生成的文档的样式没有任何明显的影响。应该,还是我错过
在我的应用程序中,我有多种主题样式(您可以将它们视为不同的、单独的 CSS 样式文件)。我想开始使用 CSS 模块,但我什至不知道如何 import我的第一个文件。 让我们假设以下(简单)目录结构:
有没有一种方法可以在一个 Azure 主题订阅上拥有多个监听客户端,并且它们都接收所有消息?我的理解是订阅的唯一实现是发布的消息仅传递到该订阅上的一个客户端,因为它就像一个队列。 可以使用同一订阅将这
我有一台 super 光滑的显示器,所以白天我可以比深色主题上的代码更好地看到自己的倒影。因此,我认为如果我可以在 vimrc 中有一个简单的 if 开关来根据一天中的时间设置深色主题或浅色主题,那就
我希望在我的 Symfony2 项目中提供基本的主题支持,因此我希望为每个主题提供单独的静态文件(css、js、img)。 我尝试添加 assetic: read_from: %kernel
有没有一种方法可以在一个 Azure 主题订阅上拥有多个监听客户端,并且它们都接收所有消息?我的理解是订阅的唯一实现是发布的消息仅传递到该订阅上的一个客户端,因为它就像一个队列。 可以使用同一订阅将这
在 NES 上有多个处于 WAITING 状态的“Discovery Worker”和“Keep Alive”线程是预期的行为吗? "DiscoveryWorker-10" Id=62 WAITING
我正在尝试找到最适合加载图像的颜色并将其应用到背景中。适应图像并使 UI 感觉更自然。 到目前为止我已经找到了 2 个方案: 1> 平均像素(下面的代码): final Color acclimati
我知道每个请求都由一个 servlet 线程提供服务,但是对于一个用户 session ,两个请求是否可以由两个不同的线程提供服务? 如果上述情况真的发生,那么第一个请求服务线程存储的线程局部变量被第
我无法理解操作栏外观与主题化之间的交互模式。我的应用设置为使用默认主题,我认为它是深色的: 通过应用范围内的样式从应用中删除操作栏会导致主要 Activity 的黑色背景: 没有 and
我是一名优秀的程序员,十分优秀!