2014-10-30 70 views
0

在一個Android應用程序的當前活動,新活動被加載時,我想用文本到語音宣佈活動的名稱。我如何獲取當前活動的名稱?安卓:得到擴展分類

我創建一個應用程序,它是是盲人訪問。我創建了一個AccessibleActivity類,它擴展了Activity;我創建的其他活動類擴展了這一點。

這裏是AccessibleActivity類的準系統版本:

package com.example; 

import android.app.Activity; 
import com.example.TTS; 

public class AccessibleActivity extends Activity { 

    TTS tts = new TTS(); // See below 

    @Override 
    public void onResume() { 
     tts.resume(getApplicationContext()); 
     super.onResume(); 
    } 

    @Override 
    public void onPause() { 
     tts.pause(); 
     super.onPause(); 
    } 
} 

這裏是由AccessibleActivity類使用的TTS類:

package com.example; 

import android.content.Context; 
import android.speech.tts.TextToSpeech; 
import java.util.Locale; 

public class TTS { 

    TextToSpeech ttobj; 

    public void resume(Context context) { 
     ttobj = new android.speech.tts.TextToSpeech(context, 
       new android.speech.tts.TextToSpeech.OnInitListener() { 

        @Override 
        public void onInit(int status) { 
         if (status != android.speech.tts.TextToSpeech.ERROR) { 
          ttobj.setLanguage(Locale.UK); 
// THIS IS WHERE I WANT TO USE THE NAME OF THE ACTIVITY, INSTEAD OF "Welcome" 
          speakText("Welcome"); 
         } 
        } 
       });   
    } 

    public void pause() { 
     if (ttobj != null) { 
      ttobj.stop(); 
      ttobj.shutdown(); 
     } 
    } 

    public void speakText(String toSpeak) { 
     ttobj.speak(toSpeak, android.speech.tts.TextToSpeech.QUEUE_FLUSH, null); 
    } 
} 

例如,假設該活動加載中...

package com.example; 

public class BrailleActivity extends AccessibleActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_braille); 
    } 
} 

...和th在strings.xml文件中包含這樣一個條目:

<string name="activity_braille">Learn to type in Braille</string> 

我怎樣才能獲得標識符activity_braille在或AccessibleActivity類的onResume()方法之後的某一點,從而使相應的字符串可以在onInit()方法使用TextToSpeech對象的?

回答

1

很難說你真的問這裏......只是不言自明的,你可以通過調用context.getString(R.string.activity_braille)得到字符串。然後您可以將該字符串傳遞給TTS。同樣,您可以將整數值R.string.activity_braille傳遞給TTS,並將TTS呼叫getString()

這裏的另一個變化中,使用活動的getTitle()方法。這樣可以讓你的Accessibility屬性成爲通用的,這樣所有的活動都可以繼承它,而且你只需要在AndroidManifest.xml中爲每個活動定製標籤:

給活動一個標題/標籤您的AndroidManifest.xml:

<activity android:name="com.example.BrailleActivity" android:label="@string/activity_braille"/> 

,然後只傳遞活動的TTS對象::

TTS yourTtsObject = new TTS(); 
yourTtsObject.onResume(this); 

,然後更改TTS的onResume調用getTitle()

public void resume(final Activity currentActivity) { 
    ttobj = new android.speech.tts.TextToSpeech(currentActivity.getApplicationContext(), 
      new android.speech.tts.TextToSpeech.OnInitListener() { 

       @Override 
       public void onInit(int status) { 
        if (status != android.speech.tts.TextToSpeech.ERROR) { 
         ttobj.setLanguage(Locale.UK); 

         speakText(currentActivity.getTitle()); 
        } 
       } 
      });   
} 
+0

這看起來像一個有用的方法。不幸的是,當我嘗試在onInit方法中使用context.getTitle()時出現編譯錯誤:'錯誤:(36,55)錯誤:局部變量上下文從內部類中訪問;需要宣佈最終'。 – 2014-10-30 21:54:07

+0

...所以最終決定。我已經更新了我的答案。 – 2014-10-30 21:55:10

+0

你是對的:'AccessibilityActivity'的設計是通用的,這樣的文字轉語音功能是提供給所有從它繼承的活動。你的'currentActivity.getTitle()'技術完全符合我的要求。謝謝。 – 2014-10-30 23:45:41