オーロラプッシュカスタムnotification sound+SoundPoolの使用

2449 ワード

需要から言えば、製品マネージャー/社長は、お客様がプッシュ通知が届いたときに声がしたいと言っています.会社の特色を際立たせるために、自分で通知音を定義して入れましょう.このようなニーズiOSを実現するのは簡単ですが、ドキュメントに従って要求に合致するフォーマット(30秒を超えない)をドラッグします.例えばnotifと呼ばれます.Cafはプロジェクトルートディレクトリに配置し、オーロラプッシュ時にsoundフィールドをnotifに設定する.Cafでいいです.Androidでは、ui+サウンドを含むnotificationのスタイルを完全にカスタマイズする方法がいくつかあります.しかし、私たちはずっとデフォルトでよく使う必要はありません.選択した案はuiがオリジナルで、バックグラウンドでプッシュするときにandroidに送信したのは無声で、onReceive()で自分でカスタム音声を再生します.そこでSoundPoolを調べると乾き、apiを見るのは簡単です.sound poolを新しく作って、loadをロードして、コードが自然に出てきました.
SoundPool.Builder builder = new SoundPool.Builder();
builder.setMaxStreams(1);
AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
attrBuilder.setLegacyStreamType(AudioManager.STREAM_ALARM);
builder.setAudioAttributes(attrBuilder.build());
SoundPool soundPool = builder.build();

新しい1つを作成して、再生の成功を保証するためにloadの成功したコールバックの中で再生したほうがいいです.結果asの自動補完はこのようなコードに与えられました.
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int i, int i1) {

    }
});

うん?i,i 1なんて(パラメータネーミングの重要性について......)、状態なんて関係ないに違いない.そして中でプレイし、プレイ関数の署名は以下の通りです.
play(int, float, float, int, int, float))(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

そこで穴の中に落ちました
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int i, int i1) {
        soundPool.play(R.raw.bird, 0.99f, 0.99f, 0, 0, 1);
    }
});

soundIDですか、そのres idもidですから、入れるのが合理的で、コンパイル-合格、実行-合格、テスト-音がしません.のいくつかのandroidバージョンのテスト機を変えたのか、それともそうなのか、犬の兄の家を探してみると、そうだったことに気づいた.
SoundPool.Builder builder = new SoundPool.Builder();
builder.setMaxStreams(1);
AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
attrBuilder.setLegacyStreamType(AudioManager.STREAM_ALARM);
builder.setAudioAttributes(attrBuilder.build());
SoundPool soundPool = builder.build();
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        if (status == 0) {
            soundPool.play(sampleId, 0.99f, 0.99f, 0, 0, 1);
        }
    }
});
soundPool.load(context, R.raw.bird, 0);

あの2つのasは自業自得で私に補完してくれたパラメータの原名はsampleIdとstatusで、ほほほ.幸いにも30分しか無駄にしなかったのですが・・・