1. 程式人生 > >android SoundPool呼叫pause stop方法使用注意問題

android SoundPool呼叫pause stop方法使用注意問題

如題 ,相信android 使用  SoundPool 不會少吧

 android SoundPool的優勢就不說了

現在要說的是

初始化的時候使用:

@Override
    protected void onStart() {

        mPoolTurnSignal = new SoundPool(1, AudioManager.STREAM_SYSTEM, 100);  
        turnSignal = mPoolTurnSignal.load(this, R.raw.turn_signal, 0);

}

    protected void onResume() {
        
        mPoolTurnSignal = new SoundPool(1, AudioManager.STREAM_SYSTEM, 100);  
        turnSignal = mPoolTurnSignal.load(this, R.raw.turn_signal, 0);
}

private void SetForSingalSound() {

        if(mSingView.getProtocolLampSignal() != 0 )
        {
            if(PoolState == POOL_PRESTART)
            {
                mPoolTurnSignal.play(turnSignal, 1, 1, 0, -1, (float) 0.7);
                PoolState = POOL_PLAYING;
            }
        }
        else
        {
            if(PoolState == POOL_PLAYING)
            {
                mPoolTurnSignal.pause(turnSignal);
                PoolState = POOL_PRESTART;
            }
        
        }
    }




play之後

pause 和stop 除了第一次可以正常關閉之後
再開啟就無法關閉了
鬱悶了一整天
現在找到問題了

   
private void SetForSingalSound() {

        if(mSingView.getProtocolLampSignal() != 0 )
        {
            if(PoolState == POOL_PRESTART)
            {
int tt = mPoolTurnSignal.play(turnSignal, 1, 1, 0, -1, (float) 0.7);
Log.i("MicroCar:", "SetForSingalSound tt "+tt);
                PoolState = POOL_PLAYING;
            }
        }
        else
        {
            if(PoolState == POOL_PLAYING)
            {
                mPoolTurnSignal.pause(turnSignal);
                PoolState = POOL_PRESTART;
            }
        
        }
    }




注意紅色字型修改後
看到logcat 就明白了
原來 每次play開啟返回 的值都是變化的
通過logcat可以看到 每次開啟tt 的到不同的值1、2、3、4、5、6.。。。
然而之前我關閉或者暫停的是

mPoolTurnSignal.pause(turnSignal);

turnSignal 是初始化第一次的值,而第二次開啟之後這數值是不一樣的  所以 是要傳遞響應的值進去關閉
比如

turnSignal = mPoolTurnSignal.play(turnSignal, 1, 1, 0, -1, (float) 0.7);
Log.i("MicroCar:", "SetForSingalSound turnSignal:"+turnSignal);
mPoolTurnSignal.pause(turnSignal);



應該可以了現在。



相關推薦

android SoundPool呼叫pause stop方法使用注意問題

如題 ,相信android 使用  SoundPool 不會少吧  android SoundPool的優勢就不說了 現在要說的是 初始化的時候使用:@Override protected void onStart() { mPoolTurnSi

android SoundPool呼叫stop方法使用注意問題

在專案中需要播放很短而不一樣的鈴聲,在網上找了很多資料,對於比較小的鈴聲都推薦是使用SoundPool來實現,因為SoundPool有以下優點: 1. SoundPool最大隻能申請1M的記憶體空間,這就意味著我們只能用一些很短的聲音片段,而不是用它來播放歌曲或者做遊戲背景

Android開發工具之Android Studio--呼叫系統隱藏方法之操作aidl檔案步驟

 android studio的aidl檔案是用來跨程序訪問的,在很多的android 程式開發過程中都會需要建立一個AIDL服務,AIDL服務是什麼,使用android studio建立AIDL

Android使用MediaRecorder的stop方法報"stop failed"錯誤的解決方案

一、 問題描述 如下所示,呼叫recorder.stop()時丟擲異常: Caused by: java.lang.RuntimeException: stop failed. at a

Android函式呼叫堆疊列印方法

RuntimeException e = new RuntimeException("leon is here"); e.fillInStackTrace(); Slog.i(TAG, "xxx" + value, e); 或者是下面的方法: if (D

android列印呼叫棧的方法

文章1: 列印呼叫棧是android平臺問題定位的基本方法,如果需要知道誰在呼叫某個函式,可以在此函式中新增列印呼叫棧函式,弄清楚函式之間的呼叫關係。 1. Java層列印呼叫棧方法RuntimeException here = new RuntimeExceptio

關於Android呼叫了post方法後貌似沒有執行run方法的解釋及解決辦法

(真糾結,剛剛發了之後才發現排版太亂了,稍作修改再發了哈~) 哎……之前糾結過Handler的執行機制,後來貌似懂了,但是近幾天又被自己的工程繞的好像又不懂了一樣!! 其實之前理解還是對的哈~只是這次的工程裡的各個變數和物件的定義和初始化位置不適當才造成表面上貌似

Android 使用MediaRecorder錄音呼叫stop()方法的時候報錯

這個問題在網上看到了太多的答案,一直提示說按照官網的api的順序來,其實解決問題的方法不是這樣的,那樣沒法解決問題,照著那個順序來也米有用 我們得知道為什麼它停止不了,為什麼停止閃退了, 這裡面有

Vue:與android做通訊,android呼叫WebAPP JS方法

這幾天遇到個需求,沒搞過頭大的很! Web給android提供一個呼叫方法供android呼叫並返回android引數。 首先最重要的是要將函式掛載到window裡去,這裡是最懵的地方。 Android.getClient(msg)  在Vue專案裡呼叫是會報錯,不過沒關係

Android-NDK學習記錄4-C呼叫Java靜態方法修改靜態欄位

一. jni互動相關-方法簽名 方法簽名在jni的使用中經常都會用到,在java中會有過載,那麼定位到一個方法的方式:類+方法名稱+方法簽名,那麼我們先學習下簽名規則: 基本型別簽名: 咱們基本型別有各自的簽名,如下表 型別名

Android呼叫本地js方法(不顯示h5介面)

有得時候在開發過程中會遇到,需要呼叫js的一些方法,又不需要顯示h5介面。比如,在你開發的產品中,PC、h5,移動端(Android、IOS)都需要使用到同一個演算法,而且這個演算法又非常的複雜,若每個端都寫一邊,不僅非常浪費時間,而且如果演算法設計到複雜的數字計算,那麼就可

Android JS 呼叫Activity的finsh方法無效

原因是WebView和Activity不在同一個執行緒中,即WebView在子執行緒中執行,Activity在主執行緒中; 解決辦法: @JavascriptInterface public void finsh() { //JS呼叫的Java方法

Java 內部類呼叫外部類方法的一個注意

今天在寫程式碼的時候,涉及到使用一個內部類去呼叫外部類方法的問題,總是得不到我想要的結果,後經過DEBUG,才發現哪裡出現了問題。現寫了一個簡單的程式碼,來重現這個問題。   打印出來的結果為: a: 20 a: 0 a: 20  為什麼是這麼一個結果呢?我想,對第一個 20

Android JNI反射呼叫Java構造方法、成員方法和靜態方法

Android開發中一般講Java介面呼叫放在APP層,但是如果想對外隱藏Java介面呼叫,應該怎麼辦呢?我們可以將介面呼叫放在JNI層,通過反射呼叫所需介面,之後打包成.so庫,這樣既可對外隱藏所有呼叫細節。下面開始講解JNI怎麼呼叫Java方法。 首先

android 7個生命週期方法分別在4個階段按一定的順序進行呼叫

4個階段如下: 1.開始Activity:在這個階段依次執行3個生命週期方法,分別是onCreate、onStart和onResume。 2.Activity失去焦點:如果在Activity獲得焦點的情況下進行其他的Activity或應用程式,當前Activity會失去焦點,在這一階段會依次執行onP

android實現app通過jni呼叫C/C++方法

本文實現在android app中使用呼叫jni庫呼叫本地C/C++方法。 1.新建android工程 2.新建java上層方法 本例子在工程中新建 cn.landsem.jnistudy 包,在其中新建TestManager類用於呼叫本地C/C++方法,該類的程式碼如下:

android app呼叫核心驅動的方法

該文不得作為商業用途,僅為學習積累所用,轉載請註明出處:http://blog.csdn.net/callon_h/article/details/51909169 1.方法1——jni呼叫底層驅動 在android框架中寫入c/c++直接呼叫底層linux驅動

Android 反射呼叫方法並利用此方法展開android通知欄(相容4.2及以上)

前段時間由於專案需要實現了展開通知欄的功能,所謂展開通知欄,就是通過expand  statusbar的方式將所有通知顯示出來,也就是手勢由頂部下滑展開的介面,statusbar屬於全域性且系統級別的介面,API中並沒有開放獨立的介面供我們呼叫以完成通知欄的展開,所以這裡

C#呼叫C++dll方法注意事項

在實際C#開發專案中,存在如下兩種情況 C#呼叫第三方庫,而第三方庫是使用C++編寫的; 牽涉到專案原始碼保密,C#程式碼容易被反編譯,因此抽取核心演算法部分使用C++編寫 這時候就涉及C#託管程式碼與C++非託管程式碼互相呼叫。 本文介紹C#呼叫C++的方法以及在C#

Android呼叫js方法及js中呼叫本地方法

Android中內建了WebKit模組,而該模組的Java層檢視類就是WebView,所有需要使用Web瀏覽器功能的Android都需要建立該檢視類物件顯示和處理請求的網路資源。目前WebKit支援Http、Https、Ftp和JavaScript請求。下面我們重點看一下如