gpt4 book ai didi

android - 应用程序中的 Android 系统小部件是否可配置?

转载 作者:行者123 更新时间:2023-12-03 09:32:38 25 4
gpt4 key购买 nike

当我按下任一音量硬件按钮时,Android 系统 Android Volume如图所示。当我按下我的应用程序时,自然也会发生这种情况。
是否可以配置这些Android系统的样式,例如音量?或者至少当我在我的应用程序中打开这些系统内容时?
编辑:按照评论中的建议,我已经覆盖了 onKeyDown ,但 adjustStreamVolume 仅在 0 和 1 之间切换。

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
when (event?.keyCode) {
KeyEvent.KEYCODE_VOLUME_UP -> {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE)
return true
}
KeyEvent.KEYCODE_VOLUME_DOWN -> {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE)
return true
}
else -> {
return super.onKeyDown(keyCode, event)
}
}
}
streamVolume 执行 不是 增加好。
不幸的是,当我连续按下 Volume_up 时,'getStreamVolume()' 值保持为 t 1

最佳答案

音量对话框
对于音量,很容易用自定义对话框替换音量对话框,从 android-hide-volume-change-bar-from-device 你可以用简单的东西来替换它,比如你的 Activity 中的进度条,因为 Android 为它提供了一个接口(interface)。
通知对话框
您还可以(如果您非常有动力)为传入的通知自定义显示。您将需要一个实现 NotificationListenerService 的服务运行,它必须拦截通知,并将它们发送到主 Activity 以按照您想要的方式显示它们。
其他对话框
其他的,例如电源菜单,由于明显的原因不会改变。
结论
没有root权限不能修改android系统的样式,因为它是在系统app中编码的。
Android 为您提供了不同的方式来改变其行为,但它有其局限性。
以下是卷的示例:
main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<ProgressBar
android:id="@+id/progress_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"/>

</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {

AudioManager manager;
ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
progressBar = findViewById(R.id.progress_horizontal);
updateVolume();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_VOLUME_UP:
updateVolume();
manager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
updateVolume();
manager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
return true;

default:
return super.onKeyDown(keyCode, event);
}
}

private void updateVolume()
{
int currentVolume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVolume = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

progressBar.setProgress((int) ((float) currentVolume/maxVolume*100));
}
}
编辑
有人说原来的音量条仍然可见。
我直接尝试了我在S10 Android 10(三星框架)上提供的代码,默认音量条不可见。因此,我还在运行 LineageOS 10 的 S4 上进行了尝试,结果相同。没有音量条出现。
关于 adjustStreamVolumeadjustVolume 它们都允许您更改音量 channel ,但 adjustStreamVolume 允许您更改特定的 channel ,例如媒体、通话等。在我的示例中,它只是编辑媒体。

关于android - 应用程序中的 Android 系统小部件是否可配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64552085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com