2013-07-23 16 views
11

के लिए स्थापित भाषाओं का पता लगाएं कोड के माध्यम से निर्धारित करना संभव है कि कौन से भाषा पैकेज वर्तमान में किसी डिवाइस पर स्थापित हैं? इस कोशिश की:ऑफ़लाइन मान्यता

Intent detailsIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS); 
    sendOrderedBroadcast(detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null); 

public class LanguageDetailsChecker extends BroadcastReceiver { 

    private List<String> supportedLanguages; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle results = getResultExtras(true); 
     if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)) 
     { 
      supportedLanguages =results.getStringArrayList(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES); 
      Log.d("TAG","languages: " + supportedLanguages); 
     } 
    } 
} 

हालांकि, उत्पादन मुझे, भाषाओं के टन से पता चलता है, जबकि मैं केवल en_UK, en_US और es_ES स्थापित की है। कोई उपाय?

+1

आप किस भाषण मान्यता सेवा के खिलाफ परीक्षण कर रहे हैं? – ozbek

+0

मैं Google – JesusS

+0

का उपयोग कर Google भाषण मान्यता दर्जन भाषाओं का समर्थन करता हूं। आपका क्या मतलब है कि आपके पास केवल अंग्रेजी यूके/यूएस और स्पेनिश स्थापित है? – ozbek

उत्तर

2

आप रूट (खेद) है, तो आप इसे इस तरह कर सकते हैं:

public static boolean isOfflineDictionaryPresent(String language) { 
    if (locale == null) locale = Locale.US; 
    String dir = "/system/usr/srec/config/" + 
      language.replace('_', '.').toLowerCase(); 
    if ((new File(dir)).isDirectory()) return true; 
    return false; 
} 

यह एंड्रॉयड 4.2.2 Recognizer.java source से फट गया था और संशोधित:

  • एक सरल बूलियन बजाय रिटर्न शब्दकोश निर्देशिका के
  • एक लोकेल के बजाय (उदा। "en_US") एक स्ट्रिंग इनपुट लेता है

मुझे आपकी पूरी सूची मिल जाएगी जैसा कि आप हैं, और यह जांचने के लिए कि कौन से ऑफ़लाइन उपलब्ध हैं, उनके माध्यम से लूप प्राप्त करें। मैंने दो डिवाइसों पर /system/usr/srec/config/ फ़ोल्डर की जांच की है, और वे दोनों मेरे द्वारा स्थापित शब्दकोशों से मेल खाते हैं।

बेशक, नीचे की ओर यह है कि यह केवल रूट के लिए काम करता है, इसलिए मुझे यकीन नहीं है कि अंत में यह आपके लिए कितना उपयोगी होगा। मुझे सच में यकीन नहीं है कि गैर रूट के लिए क्या कहना है, मुझे कुछ भी नहीं मिला।


संपादित करें: जिज्ञासा से बाहर है, हालांकि, क्या EXTRA_SUPPORTED_LANGUAGES में क्या है अगर आप ऑफ़लाइन कर रहे हैं? यदि यह सही तरीके से लौटाता है, तो आपको नेटवर्क प्रबंधक को नकली करना होगा।

+0

में शामिल हैं: भाषाएं: [af-ZA, id-ID, ms-MY, ca-ES, cs-CZ, de-DE, en-AU, en -सीए, एन -001, एन-आईएन, एन-एनजेड, एन-जेडए, एन-जीबी, एन-यूएस, ईएस-एआर, ईएस-बीओ, ईएस-सीएल, ईएस-सीओ, ईएस-सीआर, ईएस-ईसी , ईएस-यूएस, एसएस-एसवी, ईएस-ईएस, ईएस-जीटी, ईएस-एचएन, ईएस-एमएक्स, ईएस-एनआई, एसएस-पीए, एसएस-पीवाई, एसई-पीई, ईएस-पीआर, ईएस-डीओ, एसएस -यूवाई, एएस-वीई, ईयू-ईएस, फाइल-पीएच, एफआर-एफआर, ग्ल-ईएस, एचआर-एचआर, ज़ू-जेडए, आईएस, आईटी, आईटी, एचयू-एचयू, एनएल-एनएल, एनबी-एनओ , पीएल-पीएल, पीटी-बीआर, पीटी-पीटी, आरओ-आरओ, एसके-एसके, फाई-एफआई, एसवी-एसई, वीआई-वीएन, टीआर-टीआर, बीजी-बीजी, आरयू-आरयू, एसआर-आरएस, यूके -यूए, हे-आईएल, आरआर-आईएल, आर-जॉ, आर-एई, आरआर-बीएच, आरआरए, आरए-केडब्ल्यू, आरआर-ओएम, आरआर-पीएस, आर-क्यूए, आरआर-एलबी, आर-ईजी , को-केआर, सेमीएन-हंस-सीएन, सेमीएन-हंस-एचके, सीएमएन-हंट-टीड, जी-एचएटी-एचके, जे-जेपी, ला] – JesusS

+0

सभी भाषाओं को उपलब्ध कौन सी भाषाएं उपलब्ध हैं।ईएस-ईएस, एन-यूएस और एन-जीबी शामिल हैं जो कि मैंने वर्तमान में – JesusS

+0

स्थापित की हैं, इसलिए मैं देखता हूं, इसलिए "कोई नेटवर्क" स्थिति नहीं चलती है। सुनिश्चित नहीं है कि रूट समाधान के अलावा आपको क्या बताना है। शायद किसी और को कुछ मिल जाएगा। – Geobits

0

जांच इस नमूने:

public class SpeakingAndroid extends Activity implements OnInitListener { 

     //TTS object 
    private TextToSpeech myTTS; 
     //status check code 
    private int TS_CHECK_CODE = 0; 

     //create the Activity 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

      //check for TTS data 
      Intent checkTTSIntent = new Intent(); 
      checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
      startActivityForResult(checkTTSIntent, TS_CHECK_CODE); 
    } 

     //act on result of TTS data check 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (requestCode == MY_DATA_CHECK_CODE) { 
      if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
       //the user has the necessary data - create the TTS 
      myTTS = new TextToSpeech(this, this); 
      } 
      else { 
        //no data - install it now 
       Intent installTTSIntent = new Intent(); 
       installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installTTSIntent); 
      } 
     } 
    } 

     //setup TTS 
    public void onInit(int initStatus) { 

      //check for successful instantiation 
     if (initStatus == TextToSpeech.SUCCESS) { 
      if(myTTS.isLanguageAvailable(Locale.US)==TextToSpeech.LANG_AVAILABLE) 
       myTTS.setLanguage(Locale.US); 
     } 
     else if (initStatus == TextToSpeech.ERROR) { 
      Toast.makeText(this, "Sorry! Text To Speech failed...", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

सभी भाषाओं को लाने के लिए और प्रत्येक लैंग जांच कर सकते हैं टीटीएस द्वारा या नहीं समर्थित है? myTTS.isLanguageAvailable(Locale.US)

+4

आपका उत्तर टेक्स्ट-टू-स्पीच के बारे में है, न कि (ऑफ़लाइन) भाषण-से-पाठ। – Kaarel

संबंधित मुद्दे