2012-05-15 4 views
0

первый извините за мой английский Я хорошо понимаю, но не писать нормально?Чтобы познакомиться с услугой намерения

У меня есть один LocationService, который сохраняет в bd latitud и longitud. Он хорошо работает, но я хочу отправить информацию о своем намерении, когда изменил LocationListener. Я хочу отправить строку в мое намерение вставить в EditText.

Код сервиса:

public class LocalizadorService extends Service{ 

private LocationManager locManager; 
private LocationListener locListener; 
private EjercicioBD baseDatos = EjercicioBD.getEjercicioBD(this); 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    encontrarGPS(); 
    super.onStart(intent, startId); 
} 

@Override 
public void onDestroy() { 
    locManager.removeUpdates(locListener); 
    super.onDestroy(); 
} 

private void encontrarGPS() { 
    //Obtenemos una referencia al LocationManager 
    locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

    if(locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     locListener = new LocationListener(){ 
      public void onLocationChanged(Location arg0) { 
       if (arg0 != null) { 
        setCurrentLocation(arg0); 
       } 
      } 

      public void onProviderDisabled(String arg0) { 
       noGPS(); 
       Toast.makeText(LocalizadorService.this, "El GPS ha sido desactivado, activelo", Toast.LENGTH_SHORT).show(); 
      } 
      public void onProviderEnabled(String arg0) { 
         **HERE WANT TO SEND A STRING TO MY INTENT** 
      public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
         **HERE WANT TO SEND A STRING TO MY INTENT** 
        } 
     }; 
     locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 7000, 0, locListener); 
    } 
    else{ 
     Toast.makeText(LocalizadorService.this, "El GPS no esta activado, por favor activelo para empezar", Toast.LENGTH_SHORT).show(); 
     noGPS(); 
    } 
} 

private void noGPS(){ 
    Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 
private void setCurrentLocation(Location arg0){ 
    if(arg0 != null) 
     baseDatos.insertarTablas(arg0.getLatitude(), arg0.getLongitude(), arg0.getSpeed()); 
} 
} 

Как я могу сделать?

Благодарим за всех.

ответ

0

вы должны использовать BroadCastReceiver. и вы должны продлить IntentService вместо службы в классе обслуживания

Put этот пример кода в классе активности

public class YourClass{ 
    private IntentFilter yourfilter; 
    private ResponseReceiver yourreceiver; 


    Override 
    public void onCreate(Bundle savedInstanceState) { 

     yourfilter = new IntentFilter(ResponseReceiver.MESSAGE); 
     yourfilter.addCategory(Intent.CATEGORY_DEFAULT); 
     yourreceiver = new ResponseReceiver(); 
     registerReceiver(yourreceiver, yourfilter); 

    Intent i = new Intent(YourActivity.this, YourService.class); 
    startService(i); 
    } 

    public class ResponseReceiver extends BroadcastReceiver { 
     public static final String MESSAGE = "MESSAGE STRING"; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
     yourEditText.setValue(intent.getStringExtra(YourKey); 

     } 
    } 

и поставить этот коды в свой класс обслуживания всякий раз, когда изменение расположения

public class YourService extends IntentService { 

    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction(ResponseReceiver.MESSAGE); 
    broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
    broadcastIntent.putExtra(yourkey, yourvalue); 
    sendBroadcast(broadcastIntent); 
+0

Спасибо, теперь хорошо работает, но моя служба расширяет сервис, потому что если я расширяю IntentService, это не работает. Спасибо за все другое время. – monchyrcg

0

я это в LocationListener:

public void onProviderDisabled(String arg0) { 
       noGPS(); 
       Toast.makeText(LocalizadorService.this, "El GPS ha sido desactivado, activelo", Toast.LENGTH_SHORT).show(); 
       intent.setAction(EjercicioBroad.MESSAGE); 
       intent.addCategory(Intent.CATEGORY_DEFAULT); 
       intent.putExtra("prueba", "PROBANDO"); 
       sendBroadcast(intent); 
      } 

И это мой автомобиль с внутренним классом:

public class EjercicioIniciar extends Activity { 

private EditText nombreRuta; 
private Button empezar,terminar,aceptar,cancelar; 
private EjercicioBD baseDatos; 
private boolean rutaEmpezada; 
private SharedPreferences misDatos; 
private SharedPreferences.Editor editor; 
private Chronometer cronometro; 

private EditText info; 
private StringBuilder builder = new StringBuilder(); 
private RadioButton andar,correr,bici,coche; 

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

    baseDatos = EjercicioBD.getEjercicioBD(this); 

    empezar = (Button)findViewById(R.id.empezar); 

    terminar = (Button)findViewById(R.id.terminar); 

    cronometro = (Chronometer)findViewById(R.id.cronometro); 
    cronometro.setTextColor(Color.BLUE); 

    info = (EditText)findViewById(R.id.editText1); 
    info.setFocusable(false); 
    info.setShadowLayer(2, 0, 0, Color.BLACK); 

    String fontPath = "fonts/DS-DIGIT.ttf"; 
    Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 
    cronometro.setTypeface(tf); 

    misDatos = getApplicationContext().getSharedPreferences("misDatos", Context.MODE_PRIVATE); 
    editor = misDatos.edit(); 
    rutaEmpezada = misDatos.getBoolean("rutaEmpezada", false); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    empezar.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      if(!rutaEmpezada){ 
       final Dialog dialogo = new Dialog(EjercicioIniciar.this); 
       dialogo.setContentView(R.layout.nombre_tabla); 
       dialogo.setTitle("Nombre de la ruta"); 

       nombreRuta = (EditText)dialogo.findViewById(R.id.nombreRuta); 

       aceptar = (Button)dialogo.findViewById(R.id.aceptar); 
       aceptar.setOnClickListener(new OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
         int creada = baseDatos.crearTablas(nombreRuta.getText().toString().trim()); 

         if(creada == 1){ 
          Intent service = new Intent(EjercicioIniciar.this,LocalizadorService.class); 
          startService(service); 

          cronometro.setBase(SystemClock.elapsedRealtime()); 

          Calendar calen = Calendar.getInstance(); 
          String actual = ""+calen.get(Calendar.HOUR_OF_DAY)+":"+calen.get(Calendar.MINUTE)+":"+calen.get(Calendar.SECOND); 
          cronometro.start(); 

          builder.append("Ha iniciado una ruta "+radioButton().toUpperCase()+", "+nombreRuta.getText().toString().toUpperCase()+" \n"+"A las "+actual+" \n"); 
          info.setText(builder); 

          dialogo.dismiss(); 

          rutaEmpezada = true; 
          editor.putBoolean("rutaEmpezada", true); 
          editor.commit(); 
         } 
        } 
       }); 

       cancelar = (Button)dialogo.findViewById(R.id.cancelar); 
       cancelar.setOnClickListener(new OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
         dialogo.dismiss(); 
        } 
       }); 

       andar = (RadioButton)dialogo.findViewById(R.id.andar); 
       correr = (RadioButton)dialogo.findViewById(R.id.correr); 
       bici = (RadioButton)dialogo.findViewById(R.id.bici); 
       coche = (RadioButton)dialogo.findViewById(R.id.coche); 

       dialogo.show(); 
      }else 
       Toast.makeText(EjercicioIniciar.this, "Actualmente has iniciado una ruta", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    terminar.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      if(rutaEmpezada){ 
       Intent service = new Intent(EjercicioIniciar.this,LocalizadorService.class); 
       stopService(service); 

       Calendar calen = Calendar.getInstance(); 
       String actual = ""+calen.get(Calendar.HOUR_OF_DAY)+":"+calen.get(Calendar.MINUTE)+":"+calen.get(Calendar.SECOND); 
       builder.append("Fin de su ruta a las "+actual+"\n"); 
       cronometro.stop(); 
       builder.append("Duración de la ruta, "+cronometro.getText()); 
       info.setText(builder); 
       cronometro.setBase(SystemClock.elapsedRealtime()); 
       baseDatos.insertarDatos(builder.toString()); 
      } 

      rutaEmpezada = false; 
      editor.putBoolean("rutaEmpezada", false); 
      editor.commit(); 
     } 
    }); 
} 

private String radioButton(){ 
    if(andar.isChecked()) 
     return andar.getText().toString(); 
    else if(correr.isChecked()) 
     return correr.getText().toString(); 
    else if(bici.isChecked()) 
     return bici.getText().toString(); 
    else if(coche.isChecked()) 
     return coche.getText().toString(); 
    else 
     return "de alguna manera"; 
} 

public class EjercicioBroad extends BroadcastReceiver{ 
    public static final String MESSAGE = "MESSAGE STRING"; 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     info.setText(arg1.getStringExtra("prueba")); 
    } 
} 

} 

Не работает, ediText не меняется. Спасибо за все

+0

Также я забыл сказать, что вы должны расширять IntentService вместо Service в своем классе обслуживания. Я отредактировал свой ответ – SavasCinar

+0

Я забыл написать некоторые необходимые части и отредактировать. – SavasCinar

+0

Спасибо, теперь хорошо работает, но моя служба расширяет сервис, потому что если я расширяю IntentService, это не работает. Спасибо за все другое время – monchyrcg

Смежные вопросы