Am Генерируя 3 вкладки динамически, под 1-й вкладкой я генерирую тумблер, с помощью которого я могу выключить и включить GPS и WIFI
Я закодировал файлы Java для GPS и WIFI. Я проверял снова и снова построчно, но не смог найти ошибку.
Я запустил в эмуляторе и Android "Sony Arc Mobile также." Установка также идет хорошо, и проблема возникает, когда я пытаюсь запустить.
Приложение отображает сообщение " Приложение неожиданно остановлено, пожалуйста, попробуйте еще раз " Я отправил почти { все } все запросы в переполнении стека и не смог получить какой-либо возможный ответ для мой сценарий ..
Я попытался удалить файлы GPS и WIFI в приложении и заменить Toggle Button на TextView , тогда он работает нормально.
Включаю мой код, пожалуйста, проверьте его и помогите мне с друзьями.
Main.java
пакет project.sow;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
импорт android.os.Bundle;
import android.widget.TabHost;
открытый класс Main extends TabActivity {
приватный TabHost tabHost;
@ Override
public void onCreate (Bundle saveInstanceState) {
попробуйте {
super.onCreate (savedInstanceState);
setContentView (R.layout.main); * 1 031 *
Ресурсы res = getResources (); // Ресурсный объект для получения Drawables
tabHost = (TabHost) findViewById (android.R.id.tabhost); // Деятельность TabHost
TabHost.TabSpec spec; // Возможность повторного использования TabSpec для каждой вкладки
// Инициализируем TabSpec для каждой вкладки и добавляем его в TabHost
spec = tabHost.newTabSpec («Пуск»). setIndicator («Пуск»,
res.getDrawable (R.drawable.ic_sample));
spec.setContent (new Intent (this, Start.class));
tabHost.addTab (спецификация); * * тысяча тридцать-восемь
spec = tabHost.newTabSpec ("Info"). setIndicator ("Info", res.getDrawable (R.drawable.ic_sample));
spec.setContent (new Intent (). setClass (this, Info.class));
tabHost.addTab (спецификация);
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
пакет project.sow;
импорт 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;
импорт android.os.Bundle;
import android.widget.TextView;
импорт android.widget.Toast;
import android.widget.ToggleButton;
Открытый класс Начало расширяет Деятельность {
общедоступный WifiManager wifi;
логический статус;
Контекстный контекст;
public TextView textStatus;
общедоступный LocationManager locationManager;
public LocationListener locationListener;
общедоступный приемник BroadcastReceiver;
публичный 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
пакет 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;
импорт android.widget.Toast;
Открытый класс WiFiFilter расширяет BroadcastReceiver {
private static final String TAG = "WiFiFilter";
Старт старт;
public WiFiFilter (стартовый запуск) {
супер ();
this.start = старт;
}
// Подготовка к скрытому SSID и сохранение конфигурации Wi-Fi для последующего использования
@ Override
public void onReceive (контекст c, намерение намерения) {
Список результатов = start.wifi.getScanResults ();
Список результатов2 = ноль;
ScanResult filter = null;
// фильтрация SSID
для (ScanResult filterresult: результаты) {
если (filterresult.SSID == "VOLSBB")
{
результаты2 = результаты;}
}
// Проверка уровня сигнала
для (ScanResult result: results2) {
if (filter == null
|| WifiManager.compareSignalLevel (filter.level, result.level) <0) <br>
фильтр = результат;
попробуйте {
WifiManager.ACTION_PICK_WIFI_NETWORK.equals (фильтр); * * 1 118
}
catch (Exception e) {String res = "Exception: No network"; Toast.makeText (start, res, Toast.LENGTH_LONG) .show ();};
}
String message = String.format («Подключено к S0W»);
if (filter.SSID! = null) {
//Toast.makeText(start, message, Toast.LENGTH_LONG) .show ();
Log.d (TAG, "onReceive () message:" + message);
}
}}
gpsLocation.java
пакет project.sow;
import project.sow.CustomWebView;
импорт android.location.Criteria;
import android.location.GpsStatus;
импорт android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
импорт android.os.Bundle;
import project.sow.Start;
открытый класс gpsLocation реализует LocationListener {
Запустите sowWifigps;
public Location currentBestLocation;
Публичное расположение Местоположение;
Состояние GpsStatus;
CustomWebView webviewgps;
двойной а;
двойной b;
@SuppressWarnings ( "неиспользованный")
приватный String bestProvider;
// public LocationManager locationManager;
public String provider1;
public gpsLocation (Запустить sowWifigps) {
супер ();
this.sowWifigps = sowWifigps;
// TODO автоматически сгенерированная заглушка конструктора
Критерии критериев = новые критерии ();
// bestProvider = sowWifigps.locationManager.getBestProvider (критерии, ложь);
попробуйте {
если (LocationManager.GPS_PROVIDER == NULL) {
provider1 = LocationManager.NETWORK_PROVIDER;
}
else {provider1 = LocationManager.GPS_PROVIDER;}
} catch (Exception e) {provider1 = sowWifigps.locationManager.getBestProvider (критерии, ложь);}
}
@ Override
public void onLocationChanged (Location location) {
// TODO Автоматически сгенерированный метод заглушки
sowWifigps.locationManager.requestLocationUpdates (provider1, 12000, 200, sowWifigps.locationListener);
}
@ Override
public void onProviderDisabled (поставщик строк) {
// TODO Автоматически сгенерированный метод заглушки
// provider = LocationManager.NETWORK_PROVIDER;
currentBestLocation = sowWifigps.locationManager.getLastKnownLocation (Provider1);
а = currentBestLocation.getLatitude ();
б = currentBestLocation.getLongitude ();
webviewgps.loadUrl ("http://localhost/mobile/default_mobile.php?lat="+a+"&long="+b); // изменить имя сайта
}
@ Override
public void onProviderEnabled (поставщик строк) {
// TODO автоматически сгенерированный метод заглушки
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); // изменить имя сайта
}
@ Override
public void onStatusChanged (поставщик строк, состояние int, дополнительные функции пакета) {
// Заглушка автоматически сгенерированного метода TODO
sowWifigps.locationListener.onLocationChanged (location);
}
}
Представляю здесь вторую вкладку и другую, похожую на эту. Так что опускаю ее.
Info.java
package project.sow;
import android.app.Activity;
import android.os.Bundle;
открытый класс Информация расширяет Activity {
public void onCreate (Bundle saveInstanceState) {
super.onCreate (saveInstanceState);
}
@ Переопределить
protected void onResume () {
CustomWebView webView = new CustomWebView (this);
webView.loadUrl ("http://www.google.com/?s=Info");
setContentView (webView);
super.onResume ();
}}
CustomWebView.java
пакет project.sow;
import android.app.ProgressDialog;
импорт android.content.Context;
импорт android.graphics.Bitmap;
импорт android.view.View;
импорт android.webkit.WebView;
импорт android.webkit.WebViewClient;
открытый класс CustomWebViewрасширяет WebView {
private ProgressDialog pgBar = null;
@SuppressWarnings ("unused")
приватный контекст ctx;
публичный CustomWebView (контекстный контекст) {
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 ("Загрузка ...");
ctx = context;
}
закрытый класс CustomWebViewClient расширяет WebViewClient {
@ Override
public void onPageStarted (представление WebView, строковый URL, значок растрового изображения) {
super.onPageStarted (view, url, favicon);
if (! CustomWebView.this.pgBar.isShowing ()) {
CustomWebView.this.pgBar.show ();
}
}
@ Override
public void onPageFinished (представление WebView, URL-адрес строки) {
super.onPageFinished (view, url);
if (CustomWebView.this.pgBar.isShowing ()) {
CustomWebView.this.pgBar.dismiss ();
}
}
@Переопределить
public boolean shouldOverrideUrlLoading (представление WebView, 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>
Я добавил следующие разрешения в файл манифеста
<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" />