首页 文章

如何将当前纬度,经度文本说成语音

提问于
浏览
0

我想将当前的纬度,经度文本转换为语音 . 我有代码用于查找当前的纬度,经度 . 但是我在Location类中初始化TextToSpeech方法我只得到latLongString.I无法获得EX:您当前的位置是lat = 1.222,长= 22.335 .

在这里我的代码:

public class SpeakActivity extends Activity implements OnInitListener{
         private TextToSpeech tts;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_speak);



        LocationManager locationManager; 
        String context = Context.LOCATION_SERVICE; 
        locationManager = (LocationManager)getSystemService(context); 

        Criteria crta = new Criteria(); 
        crta.setAccuracy(Criteria.ACCURACY_FINE); 
        crta.setAltitudeRequired(false); 
        crta.setBearingRequired(false); 
        crta.setCostAllowed(true); 
        crta.setPowerRequirement(Criteria.POWER_LOW); 
        String provider = locationManager.getBestProvider(crta, true); 

       // String provider = LocationManager.GPS_PROVIDER; 
        Location location = locationManager.getLastKnownLocation(provider); 

       tts = new TextToSpeech(this, this);
        updateWithNewLocation(location);    

    }


    public void speak(String text2say){

             tts.speak(text2say, TextToSpeech.QUEUE_FLUSH, null);

          }

    @Override

       public void onInit(int status) {


          say("latLongString");    

       }






    private void updateWithNewLocation(Location location) { 
        String latLongString;
        TextView myLocation; 
        myLocation= (TextView) findViewById(R.id.myLocation);



        if(location!=null) { 

        double lat = location.getLatitude(); 
        double lon = location.getLongitude(); 
        latLongString = "Lat:" + lat + "\nLong:" + lon;     

        }else{

            latLongString="no location found";
        }
        myLocation.setText("Your current position is:\n" + latLongString);

        speak(latLongString);

    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_speak, menu);
        return true;
    }

@Override

public void onDestroy() {

   if (tts!= null) {

      tts.stop();

      tts.shutdown();

   }   

   super.onDestroy();

}}

3 回答

  • 0

    将你的lat long字符串传递给speakOut()中的文本,如spk给出的示例 . 并调用此函数来说话 .

    private void speakOut() {
    
            String text = txtText.getText().toString();
    
            tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
        }
    
  • 1

    按照以下更改 onInit . 你只是错了那个 .

    @Override
    public void onInit(int status) {
        // TODO Auto-generated method stub
    
        if (status == TextToSpeech.SUCCESS) {
    
            int result = tts.setLanguage(Locale.ENGLISH);
    
            // tts.setPitch(5); // set pitch level
    
            // tts.setSpeechRate(0); // set speech speed rate
    
            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "Language is not supported");
            } else {
            }
    
        } else {
            Log.e("TTS", "Initilization Failed");
        }
    
    }
    

    否则,请尝试这个工作示例 .

    public class LocationSampleActivity extends Activity implements OnInitListener 
    {
        TextView tv;
        private TextToSpeech tts;
        Location speakLoc;
    
        @Override 
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);         
            tv = (TextView)this.findViewById(R.id.txtLocation);
            tts = new TextToSpeech(this, this);
            LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            LocationListener ll = new mylocationlistener();
            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);    
        }
    
        private class mylocationlistener implements LocationListener 
        {
            @Override 
            public void onLocationChanged(Location location) {    
                if (location != null) {
                Log.d("LOCATION CHANGED", location.getLatitude() + "");
                Log.d("LOCATION CHANGED", location.getLongitude() + "");
                String str = "\n CurrentLocation: "+
                    "\n Latitude: "+ location.getLatitude() + 
                    "\n Longitude: " + location.getLongitude();       
                  tv.append(str);  
                  speak(location);
                } 
            }
    
            @Override
            public void onProviderDisabled(String provider) {
                Toast.makeText(LocationSampleActivity.this,"Error onProviderDisabled",Toast.LENGTH_LONG).show();
            }    
            @Override
            public void onProviderEnabled(String provider) {
                Toast.makeText(LocationSampleActivity.this,"onProviderEnabled",Toast.LENGTH_LONG).show();
            }
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                Toast.makeText(LocationSampleActivity.this,"onStatusChanged",Toast.LENGTH_LONG).show();
            }
        }
    
        @Override
        public void onInit(int status) {
            // TODO Auto-generated method stub
    
            if (status == TextToSpeech.SUCCESS) {
    
                int result = tts.setLanguage(Locale.ENGLISH);
    
                // tts.setPitch(5); // set pitch level
    
    //           tts.setSpeechRate(0); // set speech speed rate
    
                if (result == TextToSpeech.LANG_MISSING_DATA
                        || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                    Log.e("TTS", "Language is not supported");
                } else {
                }
    
            } else {
                Log.e("TTS", "Initilization Failed");
            }
    
        }
    
        public void speak(Location lo)
        {
            speakLoc = lo;
    
            double lat = speakLoc.getLatitude();
            double lon = speakLoc.getLongitude();
    
            String speak = "Your location is:" + lat + lon;
    
            tts.speak(speak, TextToSpeech.QUEUE_FLUSH, null);
        }
    }
    

    并根据您的需要进行修改 .

  • 1

    而不是说话(latLongString);你可以这样说(myLocation.getText);所以它会说你现在的位置是'LatLong' .

相关问题