Android C#:在后台服务中监听音量按钮的按下
我正在用C#Xamarin创建一个Android应用程序 当应用程序进入“后台”模式时,即当用户“锁定”手机时,是否有办法“监听”音量上/下键 我已经创建了几个服务对象,并通过发出命令“StartCommandResult.Sticky”使它们成为“常驻的”Android C#:在后台服务中监听音量按钮的按下,c#,android,xamarin,C#,Android,Xamarin,我正在用C#Xamarin创建一个Android应用程序 当应用程序进入“后台”模式时,即当用户“锁定”手机时,是否有办法“监听”音量上/下键 我已经创建了几个服务对象,并通过发出命令“StartCommandResult.Sticky”使它们成为“常驻的” 任何C#Xamarin代码示例都将不胜感激。您不需要创建后台服务,只需启动另一个任务来监听音量控制。如果不终止应用程序,任务将在后台运行 public class MainActivity : Activity { private
任何C#Xamarin代码示例都将不胜感激。您不需要创建后台服务,只需启动另一个任务来监听音量控制。如果不终止应用程序,任务将在后台运行
public class MainActivity : Activity
{
private int currentVolume;
public AudioManager mAudioManager;
private int maxVolume;
private bool isDestory;
Android.Media.MediaPlayer player;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
player = Android.Media.MediaPlayer.Create(this, Resource.Raw.SampleAudio);
SetContentView (Resource.Layout.Main);
mAudioManager = (AudioManager)GetSystemService(Context.AudioService);
maxVolume = mAudioManager.GetStreamMaxVolume(Stream.Music);
onVolumeChangeListener();
player.Start();
}
protected override void OnDestroy()
{
base.OnDestroy();
isDestory = true;
}
private Task voluemChangeTask;
public void onVolumeChangeListener()
{
currentVolume = mAudioManager.GetStreamVolume(Stream.Music);
voluemChangeTask = new Task(ChangeVolume);
voluemChangeTask.Start();
}
public void ChangeVolume()
{
while (!isDestory)
{
int count = 0;
try
{
Thread.Sleep(20);
}
catch (Exception e)
{
}
if (currentVolume < mAudioManager.GetStreamVolume(Stream.Music))
{
System.Console.WriteLine("volunm+");
count++;
currentVolume = mAudioManager.GetStreamVolume(Stream.Music);
mAudioManager.SetStreamVolume(Stream.Music, currentVolume, VolumeNotificationFlags.RemoveSoundAndVibrate);
}
if (currentVolume > mAudioManager.GetStreamVolume(Stream.Music))
{
System.Console.WriteLine("volunm-");
count++;
currentVolume = mAudioManager.GetStreamVolume(Stream.Music);
mAudioManager.SetStreamVolume(Stream.Music, currentVolume, VolumeNotificationFlags.RemoveSoundAndVibrate);
}
}
}
}
公共类main活动:活动
{
私有卷;
公共音频经理;
私有int-maxVolume;
私人住宅;
Android.Media.MediaPlayer;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
player=Android.Media.MediaPlayer.Create(这个,Resource.Raw.SampleAudio);
SetContentView(Resource.Layout.Main);
mAudioManager=(AudioManager)GetSystemService(Context.AudioService);
maxVolume=mAudioManager.GetStreamMaxVolume(Stream.Music);
onVolumeChangeListener();
player.Start();
}
受保护的覆盖无效OnDestroy()
{
base.ondestory();
isDestory=true;
}
私有任务voluemChangeTask;
VolumeChangelistener()上的公共无效
{
currentVolume=mAudioManager.GetStreamVolume(Stream.Music);
voluemChangeTask=新任务(变更卷);
voluemChangeTask.Start();
}
公共卷()
{
而(!isDestory)
{
整数计数=0;
尝试
{
睡眠(20);
}
捕获(例外e)
{
}
if(currentVolumemAudioManager.GetStreamVolume(Stream.Music))
{
System.Console.WriteLine(“volunm-”);
计数++;
currentVolume=mAudioManager.GetStreamVolume(Stream.Music);
mAudioManager.SetStreamVolume(Stream.Music、currentVolume、VolumeNotificationFlags.RemoveSound和Vibrate);
}
}
}
}
我已经在带有屏幕锁的真实设备上进行了测试,并获得了日志: