0

早上好,

我们开发了一个 android 应用程序,我负责找出如何在每次屏幕方向改变时消除通知声音的不良行为。显然,这种行为只存在于运行 OS 版本 3.2.3 或更高版本的设备上。

我已经阅读了几篇文章,表明可以通过取消选中“设置”->“开发人员选项”中的 USB 调试来关闭此功能,但是未选中此选项,并且我们的任何 Android 设备上的其他应用程序都不会发出此通知声音在方向改变时。

该应用程序确实需要在“收到消息”时发出通知(该应用程序连接到 Web 服务并每隔一段时间从该服务获取新消息)。因此,这将排除任何禁用通知的解决方案。

到目前为止,我已经尝试了几种可能的解决方案: 1)收到消息时,实例化一个新的NotificationManager,并在通知响起后,销毁NotificationManager。

if(MessageReceived == true) {
    String ns = Context.NOTIFICATION_SERVICE;
    messageNotifyManager = (NotificationManager) getSystemService(ns);
}
showNotification();
messageNotifyManager = null;

2)我意识到方向变化本质上是视图被破坏和重新创建。我在初始 onCreate 方法中设置了一个标志,并在重新创建通知管理器之前检查了该标志是否具有值。

public static int Flag = 0; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(Flag == 0) {
        String ns = Context.NOTIFICATION_SERVICE;
  messageNotifyManager = (NotificationManager) getSystemService(ns);
        Flag = 1;
    } 
} 

3) 在应用程序的主类中,我创建了一个公共 OrientationEventListener 属性,然后在 onCreate 方法中设置它的值,立即禁用它。当那没有禁用声音时,我尝试禁用引用应用程序主类的每个类中的属性。

public OrientationEventListender listener;
@Override
public void onCreate() {
    super.onCreate();
    appContext = getApplicationContext();
    GetPreferences();
    //...
    listener = new OrientationEventListener(appContext){
        public void onOrientationChanged(int Orientation){
        }
    };
    listener.disable();
}

现在,您可能会说,我对 Android 开发非常陌生。我认为这个解决方案非常简单,每个人都知道,这就是为什么在网络上任何方便的地方都没有答案。但是对于这个简单问题的任何帮助将不胜感激。谢谢!

4

1 回答 1

1

此问题已通过修改 AndroidManifest 解决,将以下标记添加到每个活动:android:configChanges="orientation"

于 2012-05-31T21:58:46.793 回答