Usando Tabs, Wifi y Gps

Estoy generando 3 pestañas dinámicamente en la 1ra pestaña Estoy generando un botón de alternancia con el que puedo apagar y encender tanto el GPS como el WIFI
He codificado archivos java para GPS y WIFI. Lo he comprobado una y otra vez línea por línea, pero no pude encontrar ningún error. He ejecutado en el emulador y Android "Sony Arc mobile también". La instalación también va bien y surge un problema cuando intento iniciar. La aplicación muestra el mensaje "La aplicación se detuvo inesperadamente. Vuelva a intentarlo."Me he referido casi {todos} todas las consultas en el desbordamiento de la pila y no pude obtener ninguna respuesta posible para mi escenario. Intenté eliminar los archivos GPS y WIFI en la aplicación y reemplazar Botón de activación con Vista de texto entonces está funcionando bien.
Estoy incluyendo mi código, por favor verifíquelo y ayúdenme amigos.

Principal.java

paquete project.sow;
importar android.app.TabActivity;
importar android.content.Intent;
importar android.content.res.Resources;
importar android.os.Bundle;
importar android.widget.TabHost;
public class Main extiende TabActivity {
tabHost tabHost privado;
@Anular
public void onCreate (Bundle SavedInstanceState) {
try {
super.onCreate (SavedInstanceState);
setContentView (R.layout.main);
Recursos res = getResources (); // Objeto de recurso para obtener Drawables
tabHost = (TabHost) findViewById (android.R.id.tabhost); // La actividad TabHost
TabHost.TabSpec spec; // TabSpec reutilizable para cada pestaña
// Inicialice un TabSpec para cada pestaña y agréguelo al TabHost
spec = tabHost.newTabSpec ("Inicio"). setIndicator ("Inicio", res.getDrawable (R.drawable.ic_sample));
spec.setContent (new Intent (esto, Start.class));
tabHost.addTab (especificación);
spec = tabHost.newTabSpec ("Información"). setIndicator ("Información", res.getDrawable (R.drawable.ic_sample));
spec.setContent (new Intent (). setClass (esto, Info.class));
tabHost.addTab (especificación);

   spec = tabHost.newTabSpec("Update").setIndicator("Update",   res.getDrawable(R.drawable.ic_sample));             
    spec.setContent(new Intent(this, Update.class));  
    tabHost.addTab(spec);  

    tabHost.setCurrentTab(1);  
}catch(Exception e)  
{
    android.util.Log.i("PREFS",e.getMessage());  
} } }     

Inicio.java

paquete project.sow;
importar android.app.Activity;
importar android.content.BroadcastReceiver;
importar android.content.Context;
importar android.content.IntentFilter;
importar android.ubicación.LocationListener;
importar android.location.LocationManager;
importar android.ubicación.LocationProvider;
importar android.net.wifi.WifiManager;
importar android.os.Bundle;
importar android.widget.TextView;
importar android.widget.Toast;
importar android.widget.ToggleButton;
inicio de clase pública extiende la actividad {
wifi público WifiManager;
estado booleano;
Contexto de contexto;
vista de texto pública textStatus;
administrador de ubicación público administrador de ubicación;
público LocationListener locationListener;
receptor BroadcastReceiver público;
proveedor de ubicación público proveedor de ubicación;

public void onCreate(Bundle savedInstanceState) {  
        try{   
        super.onCreate(savedInstanceState);           
        TextView textview = new TextView(this);  
        textview.setText("Toggle to On r Off the Application");  
        setContentView(textview);  
        ToggleButton btnonoff = new ToggleButton(this);  
        setContentView(btnonoff);  
        if(btnonoff.isChecked()){  
           status=true;  
            wifi.setWifiEnabled(true);  
            try{  
            // Setup WiFi  
            wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
            locationManager = (LocationManager)   getSystemService(Context.LOCATION_SERVICE);  
            if (receiver == null)  
                receiver = new WiFiFilter(this);                
            registerReceiver(receiver, new IntentFilter(  
            WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));  
            if (locationListener ==null ){locationListener=new gpsLocation(this);} 
            }  
            catch(Exception e){Toast.makeText(context, WIFI_SERVICE, Toast.LENGTH_LONG).show();}  
       }   
       else if(!btnonoff.isChecked()) {  
          status=false;    
           if(wifi.isWifiEnabled()){  
           wifi.setWifiEnabled(false);  
           locationManager.removeUpdates((LocationListener) this);  
           }  
            }               
        }  
        catch(Exception e)  
        {  
            android.util.Log.i("PREFS",e.getMessage());  
        }  
}     }  

WifiFilter.java

paquete project.sow;
importar java.util.List;
importar android.content.BroadcastReceiver;
importar android.content.Context;
importar android.content.Intent;
importar android.net.wifi.ScanResult;
importar android.net.wifi.WifiManager;
importar android.util.Log;
importar android.widget.Toast;
WiFiFilter de clase pública extiende BroadcastReceiver {
Cadena final estática privada TAG = "WiFiFilter";
Inicio inicio;
public WiFiFilter (Start start) {
súper();
this.start = start;
}
// Preparándose para el SSID oculto y guardando la configuración wifi para su uso posterior
@Anular
public void onReceive (Contexto c, Intención Intención) {
Resultados de la lista = start.wifi.getScanResults ();
Listar resultados2 = nulo;
Filtro ScanResult = nulo;
// filtrado de SSID
para (ScanResult filterresult: resultados) {
si (filterresult.SSID == "VOLSBB")
{
resultados2 = resultados;}
}
// Comprobando el nivel de la señal
para (resultado de ScanResult: resultados2) {
si (filtro == nulo
|| WifiManager.compareSignalLevel (filter.level, result.level) <0)
filtro = resultado;
try {
WifiManager.ACTION_PICK_WIFI_NETWORK.equals (filtro);
}
catch (Exception e) {String res = "Exception: No network"; Toast.makeText (start, res, Toast.LENGTH_LONG) .show ();};
}
Mensaje de cadena = String.format ("Conectado a S0W");
if (filter.SSID! = null) {
//Toast.makeText(start, message, Toast.LENGTH_LONG) .show ();
Log.d (TAG, "mensaje onReceive ():" + mensaje);
}
}}

ubicacióngps.java

paquete project.sow;
importar proyecto.sow.CustomWebView;
importar android.location.Criteria;
importar android.location.GpsStatus;
importar android.location.Location;
importar android.ubicación.LocationListener;
importar android.location.LocationManager;
importar android.os.Bundle;
importar proyecto.sow.Start;
gpsLocation de clase pública implementa LocationListener {
Inicie sowWifigps;
ubicación pública actualMejorUbicación;
ubicación de la ubicación pública;
Estado de GpsStatus;
CustomWebView webviewgps;
doble a;
doble b;
@SuppressWarnings ("no utilizado")
Private String bestProvider;
// public LocationManager locationManager;
proveedor de cadenas público1;
public gpsLocation (Iniciar sowWifigps) {
súper();
this.sowWifigps = sowWifigps;
// TODO stub de constructor generado automáticamente
Criterios criterios = nuevos criterios ();
// bestProvider = sowWifigps.locationManager.getBestProvider (criterios, falso);
try {
if (LocationManager.GPS_PROVIDER == null) {
proveedor1 = LocationManager.NETWORK_PROVIDER;
}
else {proveedor1 = LocationManager.GPS_PROVIDER;}
} catch (Exception e) {provider1 = sowWifigps.locationManager.getBestProvider (criterio, falso);}
}
@Anular
public void onLocationChanged (ubicación de la ubicación) {
// TODO código auxiliar de método generado automáticamente
sowWifigps.locationManager.requestLocationUpdates (proveedor1, 12000, 200, sowWifigps.locationListener);
}
@Anular
public void onProviderDisabled (proveedor de cadenas) {
// TODO código auxiliar de método generado automáticamente
// proveedor = LocationManager.NETWORK_PROVIDER;
currentBestLocation = sowWifigps.locationManager.getLastKnownLocation (proveedor1);
a = currentBestLocation.getLatitude ();
b = currentBestLocation.getLongitude ();
webviewgps.loadUrl ("http://localhost/mobile/default_mobile.php?lat="+ a +" & long = "+ b); // cambiar al nombre del sitio
}
@Anular
public void onProviderEnabled (proveedor de cadenas) {
// TODO código auxiliar de método generado automáticamente
sowWifigps.locationManager.requestLocationUpdates (proveedor1, 12000, 200, sowWifigps.locationListener);
a = currentBestLocation.getLatitude ();
b = currentBestLocation.getLongitude ();
webviewgps.loadUrl ("http://localhost/mobile/default_mobile.php?lat="+ a +" & long = "+ b); // cambiar al nombre del sitio
}
@Anular
public void onStatusChanged (proveedor de cadenas, estado int, extras del paquete) {
// TODO código auxiliar de método generado automáticamente
sowWifigps.locationListener.onLocationChanged (ubicación);
}
}

Aquí presento la segunda pestaña y otra se parece a esta, así que la omito.


Información.java

paquete project.sow;
importar android.app.Activity;
importar android.os.Bundle;
La información de la clase pública extiende la actividad {
public void onCreate (Bundle SavedInstanceState) {
super.onCreate (SavedInstanceState);
}
@Anular
protected void onResume () {
CustomWebView webView = new CustomWebView (esto);
webView.loadUrl ("http://www.google.com/?s=Info");
setContentView (webView);
super.onResume ();
}}



CustomWebView.java
paquete project.sow;
importar android.app.ProgressDialog;
importar android.content.Context;
importar android.graphics.Bitmap;
importar android.view.View;
importar android.webkit.WebView;
importar android.webkit.WebViewClient;
La clase pública CustomWebView extiende WebView {
privado ProgressDialog pgBar = null;
@SuppressWarnings ("no utilizado")
contexto privado ctx;
Public CustomWebView (contexto de contexto) {
super (contexto);
this.clearCache (verdadero);
this.clearFormData ();
this.clearHistory ();
this.getSettings (). setJavaScriptEnabled (verdadero);
this.getSettings (). setUserAgentString (nulo);
this.requestFocus (View.FOCUS_DOWN);
this.setWebViewClient (nuevo CustomWebView.CustomWebViewClient ());
this.pgBar = new ProgressDialog (contexto);
this.pgBar.setMessage ("Cargando ...");
ctx = contexto;
}
la clase privada CustomWebViewClient extiende WebViewClient {
@Anular
public void onPageStarted (vista WebView, URL de cadena, favicon de mapa de bits) {
super.onPageStarted (vista, url, favicon);
if (! CustomWebView.this.pgBar.isShowing ()) {
CustomWebView.this.pgBar.show ();
}
}
@Anular
public void onPageFinished (vista WebView, URL de cadena) {
super.onPageFinished (vista, url);
if (CustomWebView.this.pgBar.isShowing ()) {
CustomWebView.this.pgBar.dismiss ();
}
}
@Anular
public boolean shouldOverrideUrlLoading (vista WebView, URL de cadena) {
try {
view.loadUrl (url);
} catch (Excepción ex) {
}
return true;
}}}

principal.XML

<?xml version="1.0" encoding="utf-8"?>  
<TabHost android:layout_width="fill_parent"  
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com  /apk/res/android" android:id="@android:id/tabhost" android:background="#cabfa9">  
    <LinearLayout android:id="@+id/LinearLayout01"  
        android:orientation="vertical" android:layout_height="fill_parent"  
        android:layout_width="fill_parent">  
<TabWidget android:id="@android:id/tabs" android:layout_height="wrap_content"   android:layout_width="fill_parent"   android:background="#1b3b5b" ></TabWidget>  
        <FrameLayout android:id="@android:id/tabcontent"   android:layout_height="fill_parent" android:layout_width="fill_parent"   android:scrollbars="horizontal" android:background="#cabfa9">           
    </FrameLayout>  
    </LinearLayout>  
</TabHost>

estilo.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="tabText" parent="@android:style/Theme.Black">        
        <item name="android:textColor">#FFFFFF</item>
        <item name="android:textSize">10dip</item>        
    </style>    

</resources>

`

ic_muestra

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/icon1"
          android:state_selected="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/icon2" />
</selector>

He agregado los siguientes permisos en el archivo de manifiesto

<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

preguntado el 28 de abril de 11 a las 12:04

1 Respuestas

Se debe llamar a WI-FI y GPS en los subprocesos principales en lugar de en los subprocesos secundarios.
Entonces, en main.java,

try{  
   // Setup WiFi  
   wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
   locationManager = (LocationManager)   getSystemService(Context.LOCATION_SERVICE);  
   if (receiver == null)  
       receiver = new WiFiFilter(this);                
   registerReceiver(receiver, new IntentFilter(  
                  WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));  
   if (locationListener ==null ){
       locationListener=new gpsLocation(this);
       } 
   }  
   catch(Exception e){
       Toast.makeText(context, WIFI_SERVICE, Toast.LENGTH_LONG).show();
   }  
}     

Se colocarán los que antes se llamaban inicializados en el archivo start.java

Al hacer esto, los procesos no se eliminan, lo que es importante, y evita que la aplicación se bloquee.

Respondido 29 Abr '11, 17:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.