按下后退按钮,我希望我的应用程序进入停止状态,而不是被破坏状态.
在Android 文档中,它指出:
...当按下BACK时,并非所有活动都具有被销毁的行为.当用户开始在音乐应用程序中播放音乐然后按BACK时,应用程序将覆盖正常的后退行为,防止播放器活动被破坏,并继续播放音乐,即使其活动不再可见
如何在我自己的应用程序中复制此功能?
我认为必须有三种可能性......
捕获后退按钮(如下所示),然后调用主页按钮调用的任何方法.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)按下后退按钮,然后按下主页按钮.
捕获后退按钮,然后启动主屏幕的活动,有效地将我的应用程序的活动置于停止状态.
编辑: 我知道服务,并在与此问题相关的应用程序中使用一个.这个问题具体是关于按下后退按钮将Activity置于停止状态而不是销毁状态.
据我了解,如果编码为MPEG-4或3GPP,Android将只播放AAC格式的音频.
当它在应用程序的本地时,我能够播放编码为M4A的AAC音频,但是当从服务器获取它时它会失败.
以下工作,因为m4a文件本地保存在res/raw目录中.
MediaPlayer mp = MediaPlayer.create(this, R.raw.*file*);
mp.start();
Run Code Online (Sandbox Code Playgroud)
以下不起作用.(但MP3的确如此).
Uri uri = Uri.parse("http://*example.com*/blah.m4a");
MediaPlayer mp = MediaPlayer.create(this, uri);
mp.start();
Run Code Online (Sandbox Code Playgroud)
当m4a音频文件不是本地时,任何人都可以解释它失败的原因吗?
这是(一些)错误......
ERROR/PlayerDriver(542): Command PLAYER_INIT completed with an error or info UNKNOWN PVMFStatus
ERROR/MediaPlayer(769): error (200, -32)
WARN/PlayerDriver(542): PVMFInfoErrorHandlingComplete
DEBUG/MediaPlayer(769): create failed:
DEBUG/MediaPlayer(769): java.io.IOException: Prepare failed.: status=0xC8
DEBUG/MediaPlayer(769): at android.media.MediaPlayer.prepare(Native Method)
DEBUG/MediaPlayer(769): at android.media.MediaPlayer.create(MediaPlayer.java:530)
DEBUG/MediaPlayer(769): at android.media.MediaPlayer.create(MediaPlayer.java:507)
...
Run Code Online (Sandbox Code Playgroud)
我的目标是SDK 1.6.
我的音乐应用程序不断在后台播放音乐,但是我希望能够检测到另一个应用程序何时开始播放音频(例如YouTube应用程序),这样我就可以在应用程序中暂停/静音/停止音频.
这将允许用户在听音乐的同时继续浏览网页,但是如果他们希望在任何时候观看视频,他们可以在没有音频冲突的情况下这样做.
一种解决方案可能是监听应用程序何时开始使用AudioManager的广播.这样的意图行动是否存在?
编辑:如下面提供的答案,似乎有一种方法可以检测2.2中的音频焦点丢失AudioManager.OnAudioFocusChangeListener.
很棒,但有更常见的Android版本的解决方案吗?理想情况下1.5+.
如果我正在编写的应用程序将一些文件永久存储到外部存储器(因此它们在应用程序退出[已销毁]后仍然存在)会很方便,但是在卸载时我想做一些体面的事情并拥有这些删除文件以释放存储空间.
有没有办法在卸载时删除这些文件?
如果没有(并且我持怀疑态度),那么我每次都必须创建这些文件.我试图节省启动时间,并通过永久存在来占用所需的空间.
注意:我需要使用外部存储,因此内部存储或数据库都不合适.
注意:从Jellybean开始,不推荐使用gallery小部件.一个ViewPager应改为使用.
我想以编程方式在Gallery小部件中使用动画在图像之间移动.
我可以使用该setSelection(int position)方法更改当前显示的图像,但这不会生成动画.然后有,setSelection(int position, bool animate)但最后的额外布尔似乎没有做任何事情.
在Gallery的来源中,它似乎可以处理DPAD按键,因此我想到的解决方法是伪造按键.例如.
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT))
Run Code Online (Sandbox Code Playgroud)
但是由于某些原因我不能让这个工作.有人试过吗?
我注意到我喜欢使用的三个小部件方法moveNext(),movePrevious()并且scrollToChild()都是私有且无法使用的.
有谁知道我怎么能这样做?
我正在开发一个不打算作为标准应用程序发布的应用程序.它将在单个root设备上运行.
我需要能够写入/ sys /目录中的文件.有问题的文件由root拥有,并具有-rw-rw-rw-权限.
我知道我的代码运行的VM可能存在限制,禁止写入文件系统的这个区域,但我观察到另一个应用程序显然是这样做的.
这可能吗?怎么可能实现?手机是否需要植根(我正在使用的开发者)是无关紧要的.
我已经研究过使用FileWriter写入文件,导致以下错误.flush():
java.io.IOException: Invalid argument
at org.apache.harmony.luni.platform.OSFileSystem.writeImpl(Native Method)
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用Java执行shell命令,无论是否有"su".其中分别返回"请求被拒绝"和"权限被拒绝".
Process process = Runtime.getRuntime().exec("echo 'hello' > /sys/file");
Run Code Online (Sandbox Code Playgroud)
最后我尝试使用NDK和JNI,在案例C中有些神奇地管理这个文件.尝试访问fflush此文件时,我收到一个EOF(表示发生了错误).
所有建议都非常欢迎!
android ×6
audio ×2
aac ×1
android-ndk ×1
back ×1
external ×1
filesystems ×1
gallery ×1
image ×1
java ×1
m4a ×1
overriding ×1
permissions ×1
storage ×1
sys ×1
uninstall ×1
widget ×1