2017-06-03 18 views

答えて

1

他のアプリがオーディオフォーカスを取得または放棄したときにアプリケーションが受け取るコールバックonAudioFocusChange()を実装する必要があります。

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
// Request audio focus for playback 
int result = am.requestAudioFocus(afChangeListener, 
         // Use the music stream. 
         AudioManager.STREAM_MUSIC, 
         // Request permanent focus. 
         AudioManager.AUDIOFOCUS_GAIN); 

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
    // Start playback 
} 

とコールバック自体:

AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() { 

public void onAudioFocusChange(int focusChange) { 
    if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { 
    // Permanent loss of audio focus 
    // Pause playback immediately 
    } else if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) { 
    // Pause playback 
    } else if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) { 
    // Lower the volume, keep playing 
    } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
    // Your app has been granted audio focus again 
    // Raise volume to normal, restart playback if necessary 
    } 
} 

この公式ガイド上を見てみましょう:Handling Changes in Audio Output

4

thisポストから説明するように音楽が再生されているかどうかをチェックすることができます。

AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); 
if(manager.isMusicActive()) 
{ 
    // do something - or do it not 
} 

その後、AndroidJavaClass APIの助けを借りてのC#から呼び出すJavaでクラスのまわりでそれをラップします。


しかし、これにはJavaが必要です。あなたはそのコードを取って、Javaを使わずにC#に変換することができます。 UnityPlayerPlayer、アクティビティ、コンテキストを取得します。残りはAndroidJavaClassで処理できます。

ここには、Javaプラグインを必要としない移植されたC#のバージョンがあります。

bool isMusicPlaying() 
{ 
    const string AUDIO_SERVICE = "audio"; 
    AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity"); 
    AndroidJavaObject unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext"); 

    bool mIsPlaying; 
    using (AndroidJavaObject audioManager = unityContext.Call<AndroidJavaObject>("getSystemService", AUDIO_SERVICE)) 
    { 
     mIsPlaying = audioManager.Call<bool>("isMusicActive"); 
    } 
    return mIsPlaying; 
} 
+0

何らかの理由で再トライニングが正しく行われますか? – Tiaan

+1

こんにちは、そのコードが動作するはずです。私はこれについて少し研究し、これがUnityのバグだと分かりました。 [this](https://answers.unity3d.com/questions/984710/detect-if-music-is-playing-in-other-apps-on-androi.html)と[this](https:// issuetracker.unity3d.com/issues/android-native-android-method-audiomanager-dot-ismusicactive-always-returns-true)。バグ報告のファイル。 – Programmer

関連する問題