2014-10-30 61 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