Edn*_*pel 7 android onkeydown android-jetpack
当我按下音量硬件按钮之一时,Android 的系统
显示了一个描绘。当然,当我按下我的应用程序时也会发生这种情况。
是否可以配置这些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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
streamVolume 没有很好地增加。不幸的是,当我连续按下 Volume_up 时,'getStreamVolume()' 值仍然是 t 1
对于音量,用自定义的音量对话框替换音量对话框非常容易,从android-hide-volume-change-bar-from-device 中,您可以将其替换为简单的东西,例如 Activity 中的进度条,因为 Android 提供了它的一个接口。
您还可以(如果您非常积极的话)为传入通知设置自定义显示。您需要运行一个实现NotificationListenerService的服务,它必须拦截通知,并将它们发送到主活动以按照您想要的方式显示它们。
其他的,例如电源菜单,由于显而易见的原因将不会改变。
没有root权限是无法修改android系统的样式的,因为它是编码在系统app里的。
Android 为您提供了不同的方式来更改其行为,但它有其局限性。
<?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>
Run Code Online (Sandbox Code Playgroud)
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));
}
}
Run Code Online (Sandbox Code Playgroud)
有人说原来的音量条仍然可见。我直接在我的S10 Android 10(三星框架)上尝试了我提供的代码,默认音量条不可见。因此我也在运行 LineageOS 10 的 S4 上进行了尝试,结果相同。没有出现音量条。
关于调整流卷或调整卷,它们都允许您更改音量频道,但adjustStreamVolume允许您更改特定频道,例如媒体、通话等。在我的示例中,它仅编辑媒体。
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |