2012-11-19 66 views
0

我有4個活動。從家庭活動中,您可以導航到另外3個人。該應用程序在每個視圖上都有聲音和一個按鈕來使聲音靜音。當我從家庭活動中打開3件活動中的一件時,intent.putExtra等會傳送「無聲或無聲」值...當我在家庭活動中靜音時,它可以正常工作,但是怎麼能家庭活動知道我是否在3種活動中的一種中做出了改變,並且使用後退按鈕導航回來時靜音和靜音。這是否是覆蓋後退按鈕的正確方法?傳送回數據

謝謝你的幫助!

回答

1

回答你的問題,你會想開始每個活動的結果。假設你有 A - > B - > C - > D每個都會被啓動以獲得結果。然後,您可以在完成任何活動之前設置結果。這方面的例子可以在here找到。

但是,我想我知道一個更簡單的方法。糾正我,如果我錯了,但聲音是否靜音或適用於整個應用程序?如果是這樣,只需在首選項中設置一個布爾值,然後在每個活動中檢查它。你可以這樣做是這樣的:

擺在首選項變量:

Boolean shouldBeep = true; 


    //inside the mute/unmute button listener(or whatever) 

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putBoolean("shouldBeep", shouldBeep); 

    editor.commit(); 

然後檢索值:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    boolean shouldBeep = settings.getBoolean("shouldBeep", false); 
+0

謝謝! 簡單而高效:) 對不起,我沒有得到這個自己^^ – Alrick

1

最靈活的方式是爲子活動在發生更改時發送廣播意圖,然後在所有活動中使用onReceive。

另一種方法是使用SharedPreferences存儲狀態。

0

你有很多選擇。
1.您可以start the other activities for result當您回到主應用程序時,請檢查返回的活動。
2.Actually設置機器人音量在第二活動靜音等

mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); 
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

,然後檢查在主音量。
3.發送消息並使用Handler進行處理,以防萬一您擁有不同的線程。
希望這會有所幫助。

1

這聽起來像應用程序狀態,我會說這屬於活動之外,而不是從一個傳遞到另一個。最簡單的方法是有一個靜態類來存儲你的應用程序狀態(或其中的一部分)。有很多方法可以做到這一點,但這可能是最簡單的。如果你使用靜態類,你可以設置並從任何你想要的活動中獲取這些信息。這裏有一個例子

public class AudioPreferences { 

private static boolean isMuted = false; 

public static boolean isMuted() { 
    return isMuted; 
} 

public static boolean setMuted(boolean muted) { 
    isMuted = muted; 
    return isMuted; 
} 

public static boolean toggleMuted() { 
    isMuted = !isMuted; 
    return isMuted; 
} 

} 

其他選項是這些信息存儲在SharedPreferences,自定義應用程序類,或共享的單,你可以從一個依賴容器(評論,如果你想澄清上述任何)解決。