我知道这个问题已经被问了很多次,可能似乎是几个问题堆集,但我觉得这是相关的,重要的是许多开发人员; 我需要Service
为我的Android游戏创建一个可以运行多个活动的背景音乐,这些活动在应用程序终止时结束,并在以下所有情况下暂停:
Activity
有自己音乐的东西就开始了.(Activity
完成时完成.这恰好是一项AndEngine
活动.)onUserLeaveHint()
.另一个有用的链接TelephonyManager
类似于此.ACTION_USER_PRESENT
,这似乎是 非常 有问题的.以上是我需要的所有内容以及我拼凑在一起的信息.我目前的代码基本上类似于此.
我发现很奇怪,AndEngine
他们的音乐没有这些问题,所以也许查看源代码可以帮助寻找答案的人.我正在使用Google Code的最新功能GLES1版本.
我已经看过以下链接以及创建好音乐Service
:
我想解决方案Service
:
BroadcastReceivers
尽可能减少使用和Android Manifest添加/权限的最小化其他说明
提前感谢大家!祝你好运!
编辑 - 这是代码片段,随意改进或忽略:
媒体播放器包装
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.preference.PreferenceManager;
import android.util.Log;
public class CarefulMediaPlayer {
final SharedPreferences sp;
final MediaPlayer mp;
private …
Run Code Online (Sandbox Code Playgroud) 有没有办法收到类似的东西PHONE_UNLOCKED
(有BroadcastReceiver
某种)?
我有一个运行的服务,显示Toast
屏幕打开的时间.不幸的是,一些手机在解锁之前不会显示它.大多数时候,Toast
消息已经消失了.
我试图了解设备解锁时启动的意图.
例如:说我的活动正在运行,我按下电源按钮(关闭屏幕,锁定手机).INTENT.ACTION_SCREEN_OFF已启动.活动暂停,屏幕变为空白.
现在,当我再次按下电源按钮(INTENT.SCREEN_ON启动)时,将调用活动的onResume方法.但该设备尚未解锁.
设备解锁后会发生什么?简而言之,意图的行动和类别是什么?
对于我的应用程序,我需要知道屏幕已被锁定.如何检查这是有问题的.我使用了以下标志:
if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){
// some code
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){
// some code
}
Run Code Online (Sandbox Code Playgroud)
但这总是执行if和else部分...我必须使用哪个标志来检查屏幕是否被锁定?
我有一个时钟小部件应用程序,我需要识别手机何时解锁,我相信我可以使用动作USER_PRESENT,但我不能让它在BroadcastReceiver类中启动,我将它设置在表现如下:
<receiver
android:name="com.myApp.myApp.MyWidgetIntentReceiver"
android:exported="false"
android:label="widgetBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" >
</action>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/demo_widget_provider" />
</receiver>
Run Code Online (Sandbox Code Playgroud)
这就是我试图在BroadcastReceiver中获取它的方式:
public class MyWidgetIntentReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT){
Log.i("TICK", intent.getAction());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我解锁手机后没有开火,你能帮我解决一下,还是给我一个更好的方法来检查手机什么时候解锁?谢谢!
以下摘自http://developer.android.com/reference/android/app/KeyguardManager.html
public boolean isDeviceLocked()
返回设备当前是否已锁定并需要PIN,模式或密码才能解锁.如果解锁设备当前需要PIN,模式或密码,则返回true.
public boolean isKeyguardSecure()
返回键盘锁是否需要密码才能解锁.如果keyguard是安全的,则返回true.
isDeviceLocked
和之间有什么区别isKeyguardSecure
?
根据官方文档,只能从Android O(API 26)开始动态注册屏幕锁定/解锁事件的BroadcastReceiver(通过在Activity中调用registerReceiver)。在AndroidManifest.xml中注册这些事件不再起作用,因此,当应用程序不运行时(先前已被Android终止或被用户强制关闭),该应用程序将不再能够接收这些事件(ACTION_SCREEN_ON / ACTION_USER_PRESENT)。
帖子中也提到了同样的问题: Android-检测手机解锁事件,而不是屏幕显示
是否还有其他其他可靠且可行的方式来获取屏幕锁定/解锁事件?
通过在应用程序的AndroidManifest .xml文件中注册ACTION_USER_PRESENT,尝试隐式广播以接收屏幕锁定/解锁事件。但是根据文档,除了某些例外情况之外,不当广播都是行不通的。您必须在活动类中使用registerReceiver的动态注册来执行此操作。因此,如果该应用被Android操作系统杀死,或者被用户强行停止,则该应用不会收到屏幕锁定/解锁广播。
活动类动态广播接收机
registerReceiver(new PhoneUnlockedReceiver(),
new IntentFilter("android.intent.action.USER_PRESENT"));
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(
Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
//phone was unlocked, add handling here
}
}
}
Run Code Online (Sandbox Code Playgroud) android ×7
lockscreen ×2
action ×1
andengine ×1
api ×1
background ×1
categories ×1
keyguard ×1
locking ×1
playback ×1
service ×1
unlock ×1