我们正在实施Android手机程序,播放从互联网流式传输的音频.这是我们的大致工作:
到目前为止,我们的目标设备是Droid和Nexus One.在Nexus One上一切都很棒,但在Droid上MP3解码速度太慢了.如果我们把Droid放在负载下,音频播放就会开始跳过.我们不允许将MP3数据解码为SD卡,但我知道这不是我们的问题.
我们没有编写自己的MP3解码器,而是使用了MPADEC(http://sourceforge.net/projects/mpadec/).它是免费的,很容易与我们的程序集成.我们用NDK编译它.
在使用各种分析工具进行详尽分析后,我们确信这个解码器落后了.
以下是我们正在考虑的选项:
找到我们可以使用Android NDK编译的另一个MP3解码器.此MP3解码器必须经过优化才能在移动ARM设备上运行,或者可能使用仅整数数学或其他一些优化来提高性能.
由于内置的Android MediaPlayer服务将采用URL,我们可能能够在我们的程序中实现一个小型HTTP服务器,并使用解密的MP3为MediaPlayer提供服务.这样我们就可以利用内置的MP3解码器.
通过NDK访问内置MP3解码器.我不知道这是否可行.
有没有人对我们如何加速MP3解码有任何建议?
- Rob Sz
我正在尝试HTTP在我的应用程序中编写一个轻量级服务器,以feed动态生成MP3内置数据Android MediaPlayer.我不被允许将我的内容存储在SD card.
我的输入数据基本上是无限长度的.我告诉MediaPlayer它的数据源基本上应该是这样的"http://localhost/myfile.mp3".我有一个简单的服务器设置,等待MediaPlayer发出此请求.但是,MediaPlayer不是很合作.首先,它创建HTTP GET并尝试获取整个文件.如果我们尝试简单地将数据转储到其中,socket那么我们尝试使用HTTPRange标头以块的形式写入数据. MediaPlayer不喜欢这个并且不会继续请求后续的块.
有没有人直接将数据流成为MediaPlayer?我需要实现一个RTSP或Shoutcast服务器吗?我只是错过了批评HTTP header吗?我应该在这里使用什么策略?
我想扩展有关在Android Ice Cream Sandwich(4.0及更高版本)平板电脑设备上屏幕底部隐藏系统/导航栏的讨论.
已经有一个线程(有没有办法隐藏Android 3.0中的系统栏?这是一个内部设备,我正在管理导航)关于隐藏Honeycomb设备上的栏.然而,我的客户将使用最新的冰淇淋三明治设备,并且非常热衷于隐藏屏幕底部的条形图.他们的应用程序不适合普通消费者使用,他们接管整个屏幕以提供他们的体验非常重要.如何在没有设备生根或重写固件的情况下隐藏此栏 - 或者至少覆盖所有按钮的行为?
我正在开发一个可用于监控Android设备上的地理围栏的库.我注意到,我在设备设置中关闭并重新启用了位置服务后,我在Google Play位置服务GeofencingApi类中注册的地理围栏会丢失.
我见过人们建议我需要android.location.PROVIDERS_CHANGED在我的AndroidManifest.xml文件中注册广播接收器.我已经这样做了 - 但是当我在测试应用程序中添加和删除测试提供程序时,只会调用此广播接收器.在设备设置中切换位置服务时,我根本不接收它.
难道我做错了什么?有谁知道如何可靠地确定用户何时在设备设置中切换位置服务?我希望能够在后台看到这些事件 - 即使我的应用程序没有运行.
我想我可以设置一个在后台运行的重复任务,并定期检查是否已切换位置服务,但这听起来很粗糙,效率低下.
如果它有帮助,我正在测试运行Android 4.4.2的Moto G.我对地理围栏所做的一切工作到目前为止一直很好.
编辑:经过更多的研究后,我发现PROVIDERS_CHANGED广播的行为变化很大,具体取决于手机版本和型号.运行Android 5.1的我的Nexus 5似乎工作得很好 - 我能够PROVIDERS_CHANGED定期收听广播.我还有一台运行4.4.x的Moto G和Moto X手机,他们从未PROVIDERS_CHANGED为我制作过该广播.Android 4.2上的三星Galaxy S3会为我制作广播,但在我将Map活动与测试位置提供商一起使用后就停止了.
无论如何,我现在决定停止追求这个问题.我认为Android只是个错误.
我在stackoverflow和Google Groups上了解了一下,并没有真正找到这个确切问题的答案.
我只是希望能够知道什么国家的Android手机的用户是目前英寸
我假设如果用户仅使用wifi,则TelephonyManager不起作用.这是真的?
我们已经尝试使用android.location.Geocoder传递用户当前的纬度和经度,但它确实很不稳定.它会经常返回空结果.有时我们可以继续问它并最终会返回结果,但这真的很难看.有更可靠的方式吗?
谢谢,Rob Sz
android ×5
android-4.0-ice-cream-sandwich ×1
android-ndk ×1
decode ×1
http ×1
location ×1
media-player ×1
mp3 ×1
stream ×1
tablet ×1