相关疑难解决方法(0)

跨多种活动的Android全面防故障音乐服务

我知道这个问题已经被问了很多次,可能似乎是几个问题堆集,但我觉得这是相关的,重要的是许多开发人员; 我需要Service为我的Android游戏创建一个可以运行多个活动的背景音乐,这些活动在应用程序终止时结束,并在以下所有情况下暂停:

  1. 一个Activity有自己音乐的东西就开始了.(Activity完成时完成.这恰好是一项AndEngine活动.)
  2. 按下主屏幕,应用程序背景,或终止应用程序.应用程序返回前台时恢复.需要使用onUserLeaveHint().另一个有用的链接
  3. 手机接到电话并中断应用程序.处理呼叫时恢复.需要使用TelephonyManager类似于.
  4. 屏幕已锁定.(简历屏已经被解锁后)需要使用的ACTION_USER_PRESENT,这似乎 非常 有问题的.
  5. 基本上,只要没有显示应用程序或者向用户显示来自#1的特殊活动,音乐就会暂停.

以上是我需要的所有内容以及我拼凑在一起的信息.我目前的代码基本上类似于.

我发现很奇怪,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)

service android background playback andengine

25
推荐指数
1
解决办法
2644
查看次数

在android中获取解锁事件的方法?

有没有办法收到类似的东西PHONE_UNLOCKED(有BroadcastReceiver某种)?

我有一个运行的服务,显示Toast屏幕打开的时间.不幸的是,一些手机在解锁之前不会显示它.大多数时候,Toast消息已经消失了.

android broadcastreceiver lockscreen

22
推荐指数
1
解决办法
2万
查看次数

Android - 设备解锁后会发生什么?

我试图了解设备解锁时启动的意图.

例如:说我的活动正在运行,我按下电源按钮(关闭屏幕,锁定手机).INTENT.ACTION_SCREEN_OFF已启动.活动暂停,屏幕变为空白.

现在,当我再次按下电源按钮(INTENT.SCREEN_ON启动)时,将调用活动的onResume方法.但该设备尚未解锁.

设备解锁后会发生什么?简而言之,意图的行动和类别是什么?

android action unlock categories android-intent

21
推荐指数
1
解决办法
2万
查看次数

如何找到屏幕被锁定在android中

对于我的应用程序,我需要知道屏幕已被锁定.如何检查这是有问题的.我使用了以下标志:

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部分...我必须使用哪个标志来检查屏幕是否被锁定?

android

13
推荐指数
2
解决办法
3万
查看次数

如何使用意图操作USER_PRESENT?

我有一个时钟小部件应用程序,我需要识别手机何时解锁,我相信我可以使用动作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)

我解锁手机后没有开火,你能帮我解决一下,还是给我一个更好的方法来检查手机什么时候解锁?谢谢!

android broadcastreceiver android-intent

11
推荐指数
3
解决办法
1万
查看次数

android的KeyguardManager中isDeviceLocked和isKeyguardSecure有什么区别?

以下摘自http://developer.android.com/reference/android/app/KeyguardManager.html

public boolean isDeviceLocked()

返回设备当前是否已锁定并需要PIN,模式或密码才能解锁.如果解锁设备当前需要PIN,模式或密码,则返回true.

public boolean isKeyguardSecure()

返回键盘锁是否需要密码才能解锁.如果keyguard是安全的,则返回true.

isDeviceLocked和之间有什么区别isKeyguardSecure

api android locking lockscreen keyguard

8
推荐指数
1
解决办法
5473
查看次数

如何可靠地获取API Level&gt; = 26的屏幕解锁事件?

根据官方文档,只能从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 android-api-levels

5
推荐指数
0
解决办法
265
查看次数