第一个对不起我的英语,我理解得很好,但写不好?
我有一个LocationService,它在bd中保存纬度和纵向。他运作良好,但我想在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 :(得分:0)
例如,您可以在Activity
的{{1}}和BroadcastReceiver
方法中使用sentBroadcast
。
请参阅this如何使用Service
。
答案 1 :(得分:0)
你应该使用BroadCastReceiver。你应该在服务类
中扩展IntentService而不是Service将此示例代码放入您的活动类
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);
答案 2 :(得分: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"));
}
}
}
不工作,ediTtext不会改变。谢谢所有