【问题标题】:How To Disable Native Toast Messages如何禁用本机 Toast 消息
【发布时间】:2016-07-26 05:56:04
【问题描述】:

我正在创建一个实现远程的应用程序。遥控器上的一个按钮可以调高和调低音量。我让遥控器上的这个按钮做一些不同的事情,因为在我的应用程序中调整音量是无关紧要的。所以,我的问题是:

是否可以在应用程序本身或设备的固件中禁用本机 toast 消息。我正在将我的应用程序构建到自定义 ROM 中,所以我应该可以完全访问 toast 消息吗?

谢谢大家!

【问题讨论】:

  • 我很难理解你的问题。你说要覆盖默认的 toast 样式或音量增大/减小执行?
  • @Youngjae 理想情况下,我想覆盖弹出的 toast 消息以显示音量的变化。
  • @user154248 你可以查thisthis
  • @Soham 你发给我的第二个链接可能是答案,但我还是要试试。
  • 我想知道的是:该卷消息是敬酒吗?

标签: android android-toast rom


【解决方案1】:

根据同一 here 上的 Google 群组的讨论,您不能。

是的,您可以使用无障碍服务来检测 toast,但绝对不能阻止它们。

希望这会有意义。

【讨论】:

    【解决方案2】:
    Toast CustomToast = new Toast(getBaseContext());
    
    CustomToast = Toast.makeText(getBaseContext(), val, Toast.LENGTH_LONG);
    
    CustomToast.setGravity(Gravity.CENTER | Gravity.CENTER, 0, 0);
    
    CustomToast.show();
    

    【讨论】:

      【解决方案3】:

      您说您正在将应用程序构建到自定义 ROM,所以我建议您查看: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/media/AudioManager.java#AudioManager.handleKeyDown%28android.view.KeyEvent%2Cint%29

      我相信在您的 ROM 中修补该功能(例如,清空其主体)可以消除所有音量敬酒。

      【讨论】:

      • 音频管理器在 ROM 的哪个部分?我认为它会在system.img 图像中,但我不知道它会在哪里
      • 如果你从 AOSP 编译你的 ROM,它在 platform_frameworks_base/media/java/android/media/AudioManager.java 下。如果你要补丁一个ROM,我会在framework.jar中搜索
      • 你知道如何反编译那个 .jar 文件吗?
      • Baksmali 和 smali
      • 顺便说一句,您使用哪个 Android 版本?由于 Android 5.0 framework.jar 不包含代码,系统“类”在 Boot.oat 中(因为 ART)。我不知道反编译然后重新编译这些文件的工具。如果你确实使用新的Android版本,我会建议修补ROM的代码而不是它的输出
      【解决方案4】:

      看看AudioManager->FLAG_SHOW_UI 如果您不想显示本地吐司,请不要使用此标志。 以 adjustStreamVolume 为例

       AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
       audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_SAME, flags); 
      

      编辑: 您还可以收听硬音量按钮操作

       @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
          if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){
              //set Volume without toast flag
          }
          return true;
      }
      

      【讨论】:

      • 但是,如果我以编程方式调整音量,这不会覆盖 toast 吗?当音量按钮也被按下时,我需要它来覆盖 toast
      • 好的,我会尽快尝试。谢谢
      【解决方案5】:

      要覆盖 toast 消息,pop 可以这样使用:

      Toast mToast = Toast.makeText( this  , "" , Toast.LENGTH_SHORT );
      switch(id)
      
       {
       case 0:
             mToast.setText( "Volume UP" );
             mToast.setGravity(Gravity.TOP | Gravity.TOP, 0, 0);
             mToast.show();
                 break;
       case 1:
            mToast.setText( "Stop" );
            mToast.setGravity(Gravity.CENTER | Gravity.CENTER, 0, 0);
            mToast.show();
                 break;
       case 2:
            mToast.setText( "Volume Down" );
            mToast.setGravity(Gravity.END | Gravity.END, 0, 0);
            mToast.show();
                 break;
              } 
        }
      }); 
      

      【讨论】:

      • 这不会导致屏幕底部出现一个空白的黑色椭圆形吗?而且我不相信这会起作用,因为音量吐司出现在顶部并且直接内置在系统中,但我会试一试
      【解决方案6】:

      是的..你可以自定义它

       Toast customToast = new Toast(getBaseContext());
       customToast = Toast.makeText(getBaseContext(), val, Toast.LENGTH_LONG);
       customToast.setGravity(Gravity.CENTER | Gravity.CENTER, 0, 0);
       customToast.show();
      

      【讨论】:

      • 不想自定义它,我想把所有的吐司一起去掉
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 2022-12-10
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      相关资源
      最近更新 更多