2017-02-09 9 views
0

私はC#XamarinでAndroid Appを作成しています。Android C#:バックグラウンドサービスの音量ボタンの操作を聞く

アプリが「バックグラウンド」モードに入るとき、つまりユーザーが携帯電話を「ロック」するときに音量のアップ/ダウンキーを「聴く」方法はありますか?

「StartCommandResult.Sticky」コマンドを発行することによって、いくつかのサービスオブジェクトを作成し、それらを「常駐」にしました。

サンプルのC#Xamarinコードは非常に高く評価されます。

答えて

0

バックグラウンドサービスを作成する必要はありません。ボリュームコントロールを聴くために別のタスクを開始するだけです。アプリケーションが強制終了されない場合、タスクはバックグラウンドで実行されます。

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); 
      } 
     } 
    } 
} 

私は画面ロックを実際のデバイスでそれをテストし、ログを持っている:

enter image description here

関連する問題