Am Generating 3 tabs dynamically under 1st tab am generating a toggle button using which i can switch off and on both GPS and WIFI
I have coded java files for GPS and WIFI. I have checked again and again line by line but couldn't find any bug. I have run in the emulator and android "Sony Arc mobile also."Installation also goes well and problem arises when i try to launch. The application is showing the message "The application has stopped unexpectedly please try again" I have referred almost{all} all the queries in stack overflow and couldn't get any possible answer for my scenario.. I tried removing the GPS and WIFI files in the application and replacing Toggle Button with TextView then its working fine. Am including my code please verify it and help me out buddies.Main.java
package project.sow;
import android.app.TabActivity; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.widget.TabHost; public class Main extends TabActivity { private TabHost tabHost; @Override public void onCreate(Bundle savedInstanceState) { try{ super.onCreate(savedInstanceState); setContentView(R.layout.main); Resources res = getResources(); // Resource object to get Drawables tabHost = (TabHost)findViewById(android.R.id.tabhost); //The activity TabHost TabHost.TabSpec spec; // Resusable TabSpec for each tab // Initialize a TabSpec for each tab and add it to the TabHost spec = tabHost.newTabSpec("Start").setIndicator("Start", res.getDrawable(R.drawable.ic_sample)); spec.setContent(new Intent(this,Start.class)); tabHost.addTab(spec); spec = tabHost.newTabSpec("Info").setIndicator("Info", res.getDrawable(R.drawable.ic_sample)); spec.setContent(new Intent().setClass(this, Info.class)); tabHost.addTab(spec);
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());
} } }
Start.java
package project.sow;
import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.IntentFilter; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.net.wifi.WifiManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import android.widget.ToggleButton; public class Start extends Activity { public WifiManager wifi; boolean status; Context context; public TextView textStatus; public LocationManager locationManager; public LocationListener locationListener; public BroadcastReceiver receiver; public LocationProvider locationProvider;
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
package project.sow;
import java.util.List; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.util.Log; import android.widget.Toast; public class WiFiFilter extends BroadcastReceiver { private static final String TAG = "WiFiFilter"; Start start; public WiFiFilter(Start start) { super(); this.start=start; } //Preparing for Hidden SSID and saving the wifi config for later use @Override public void onReceive(Context c, Intent intent) { List results = start.wifi.getScanResults(); List results2 = null; ScanResult filter = null; //filtering SSID for(ScanResult filterresult : results ){ if(filterresult.SSID=="VOLSBB") { results2 = results;} } //Checking the signal Level for (ScanResult result : results2) { if (filter == null || WifiManager.compareSignalLevel(filter.level, result.level) < 0) filter = result; try{ WifiManager.ACTION_PICK_WIFI_NETWORK.equals(filter); } catch(Exception e){String res="Exception:No network";Toast.makeText(start, res, Toast.LENGTH_LONG).show();}; } String message = String.format("Connected to S0W"); if(filter.SSID != null){ //Toast.makeText(start, message, Toast.LENGTH_LONG).show(); Log.d(TAG, "onReceive() message: " + message); } } }
gpsLocation.java
package project.sow;
import project.sow.CustomWebView; import android.location.Criteria; import android.location.GpsStatus; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import project.sow.Start; public class gpsLocation implements LocationListener{ Start sowWifigps; public Location currentBestLocation; public Location location; GpsStatus开发者_开发百科 status; CustomWebView webviewgps; double a; double b; @SuppressWarnings("unused") private String bestProvider; //public LocationManager locationManager; public String provider1; public gpsLocation(Start sowWifigps) { super(); this.sowWifigps=sowWifigps; // TODO Auto-generated constructor stub Criteria criteria = new Criteria(); //bestProvider = sowWifigps.locationManager.getBestProvider(criteria, false); try{ if(LocationManager.GPS_PROVIDER==null){ provider1 = LocationManager.NETWORK_PROVIDER; } else {provider1=LocationManager.GPS_PROVIDER;} }catch( Exception e){ provider1=sowWifigps.locationManager.getBestProvider(criteria, false);} } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub sowWifigps.locationManager.requestLocationUpdates(provider1, 12000, 200, sowWifigps.locationListener); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub //provider = LocationManager.NETWORK_PROVIDER; currentBestLocation=sowWifigps.locationManager.getLastKnownLocation(provider1); a=currentBestLocation.getLatitude(); b=currentBestLocation.getLongitude(); webviewgps.loadUrl("http://localhost/mobile/default_mobile.php?lat="+a+"&long="+b); //change to site name } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub sowWifigps.locationManager.requestLocationUpdates(provider1, 12000, 200, sowWifigps.locationListener); a=currentBestLocation.getLatitude(); b=currentBestLocation.getLongitude(); webviewgps.loadUrl("http://localhost/mobile/default_mobile.php?lat="+a+"&long="+b); //change to site name } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub sowWifigps.locationListener.onLocationChanged(location); } }
Am presenting here second Tab and other resembles this one.So am omitting it.
Info.javapackage project.sow;
import android.app.Activity; import android.os.Bundle; public class Info extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { CustomWebView webView = new CustomWebView(this); webView.loadUrl("http://www.google.com/?s=Info"); setContentView(webView); super.onResume(); } }
CustomWebView.java
package project.sow; import android.app.ProgressDialog; import android.content.Context; import android.graphics.Bitmap; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; public class CustomWebView extends WebView { private ProgressDialog pgBar = null; @SuppressWarnings("unused") private Context ctx; public CustomWebView(Context context) { super(context); this.clearCache(true); this.clearFormData(); this.clearHistory(); this.getSettings().setJavaScriptEnabled(true); this.getSettings().setUserAgentString(null); this.requestFocus(View.FOCUS_DOWN); this.setWebViewClient(new CustomWebView.CustomWebViewClient()); this.pgBar = new ProgressDialog(context); this.pgBar.setMessage("Loading..."); ctx = context; } private class CustomWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if (!CustomWebView.this.pgBar.isShowing()) { CustomWebView.this.pgBar.show(); } } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (CustomWebView.this.pgBar.isShowing()) { CustomWebView.this.pgBar.dismiss(); } } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try{ view.loadUrl(url); }catch(Exception ex){ } return true; } } }
main.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>
style.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_sample
<?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>
I have added the following permissions in the manifest file
<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" />
WI-FI and GPS are to be called in the main threads rather than in child threads..
So in the 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();
}
}
Are to be placed which are formerly called initialized in the start.java
By doing this the processes are not killed which are important and stops the application from crashing.
精彩评论