Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android C#:在后台服务中监听音量按钮的按下_C#_Android_Xamarin - Fatal编程技术网

Android C#:在后台服务中监听音量按钮的按下

Android C#:在后台服务中监听音量按钮的按下,c#,android,xamarin,C#,Android,Xamarin,我正在用C#Xamarin创建一个Android应用程序 当应用程序进入“后台”模式时,即当用户“锁定”手机时,是否有办法“监听”音量上/下键 我已经创建了几个服务对象,并通过发出命令“StartCommandResult.Sticky”使它们成为“常驻的” 任何C#Xamarin代码示例都将不胜感激。您不需要创建后台服务,只需启动另一个任务来监听音量控制。如果不终止应用程序,任务将在后台运行 public class MainActivity : Activity { private

我正在用C#Xamarin创建一个Android应用程序

当应用程序进入“后台”模式时,即当用户“锁定”手机时,是否有办法“监听”音量上/下键

我已经创建了几个服务对象,并通过发出命令“StartCommandResult.Sticky”使它们成为“常驻的”


任何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);
}
}
}
}
我已经在带有屏幕锁的真实设备上进行了测试,并获得了日志: