如何阻止强制关闭应用程序?

问题描述:

我正在制作一个示例应用程序,用于在我的Evo 4G上定位GPS。这最终将被整合到一张时间卡使用的应用程序中。但是,它强制关闭。我没有任何想法,为什么...有任何帮助?如何阻止强制关闭应用程序?

package com.Rick.GPS; 

import android.app.Activity; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.LocationProvider; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Main extends Activity implements LocationListener { 

/* this class implements LocationListener, which listens for both 
* changes in the location of the device and changes in the status 
* of the GPS system. 
* */ 

static final String tag = "Main"; // for Log 

TextView txtInfo; 
LocationManager lm; 
StringBuilder sb; 
int noOfFixes = 0; 

/** Called when the activity is first created. */ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* get TextView to display the GPS data */ 
    txtInfo = (TextView) findViewById(R.id.Text1); 

    /* the location manager is the most vital part it allows access 
    * to location and GPS status services */ 
    lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
} 


protected void onResume() { 
    /* 
    * onResume is is always called after onStart, even if the app hasn't been 
    * paused 
    * 
    * add location listener and request updates every 1000ms or 10m 
    */ 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10f, this); 
    super.onResume(); 
} 


protected void onPause() { 
    /* GPS, as it turns out, consumes battery like crazy */ 
    lm.removeUpdates(this); 
    super.onPause(); 
} 


public void onLocationChanged(Location location) { 
    Log.v(tag, "Location Changed"); 

    sb = new StringBuilder(512); 

    noOfFixes++; 

    /* display some of the data in the TextView */ 

    sb.append("No. of Fixes: "); 
    sb.append(noOfFixes); 
    sb.append('\n'); 
    sb.append('\n'); 

    sb.append("Londitude: "); 
    sb.append(location.getLongitude()); 
    sb.append('\n'); 

    sb.append("Latitude: "); 
    sb.append(location.getLatitude()); 
    sb.append('\n'); 

    sb.append("Altitiude: "); 
    sb.append(location.getAltitude()); 
    sb.append('\n'); 

    sb.append("Accuracy: "); 
    sb.append(location.getAccuracy()); 
    sb.append('\n'); 

    sb.append("Timestamp: "); 
    sb.append(location.getTime()); 
    sb.append('\n'); 

    txtInfo.setText(sb.toString()); 
} 


public void onProviderDisabled(String provider) { 
    /* this is called if/when the GPS is disabled in settings */ 
    Log.v(tag, "Disabled"); 

    /* bring up the GPS settings */ 
    Intent intent = new Intent(
      android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivity(intent); 
} 


public void onProviderEnabled(String provider) { 
    Log.v(tag, "Enabled"); 
    Toast.makeText(this, "GPS Enabled", Toast.LENGTH_SHORT).show(); 

} 


public void onStatusChanged(String provider, int status, Bundle extras) { 
    /* This is called when the GPS status alters */ 
    switch (status) { 
    case LocationProvider.OUT_OF_SERVICE: 
     Log.v(tag, "Status Changed: Out of Service"); 
     Toast.makeText(this, "Status Changed: Out of Service", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    case LocationProvider.TEMPORARILY_UNAVAILABLE: 
     Log.v(tag, "Status Changed: Temporarily Unavailable"); 
     Toast.makeText(this, "Status Changed: Temporarily Unavailable", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    case LocationProvider.AVAILABLE: 
     Log.v(tag, "Status Changed: Available"); 
     Toast.makeText(this, "Status Changed: Available", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 


protected void onStop() { 
    /* may as well just finish since saving the state is not important for this toy app */ 
    finish(); 
    super.onStop(); 
} 
} 

这里是布局文件...

<TextView 
    android:id="@+id/Text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 

这里是清单......

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.Rick.GPS" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-sdk android:minSdkVersion="10" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".GPSActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

感谢您的帮助,您可以给我...

+1

你试过调试呢? –

+1

在日志文件中查找异常。这应该告诉你问题出在哪里。 (要在Eclipse中查看LogCat,请打开LogCat视图(窗口>显示视图>其他...,然后选择Android下的LogCat)。 –

+0

logcat文件中是什么? – Nikkoli

两个错误,我可以发现:

  1. 您需要调用setContentView(R.layout.main);,不评论它。否则,在下一行中会出现NullPointerException。
  2. 在XML中,您将Text1定义为EditText,但是在您的班级中,您尝试将其转换为TextView,您会得到班级转换异常。在XML或Java文件中更改它。根据您在代码中的评论,您应该在XML中进行更改。
+0

谢谢,我同时改变了...仍然强制关闭日志猫状态:“致命的例外:主” – user1034282

onLocationChange是否可以访问textField?无论如何,我认为设计此应用程序的更好方法是在单独的thead中执行位置侦听,例如,使用handler来更新UI线程。这种方法还可以消除位置修复可能会阻塞UI线程的风险。

+0

我认为现在它...... – user1034282

您在onPause方法的主体中调用super.onResume。

+0

试过...没有工作,谢谢... – user1034282

protected void onPause() {  /* GPS, as it turns out, consumes battery like crazy */  lm.removeUpdates(this);  super.onPause(); } 

还的setContentView代码注释...

+0

改变,... – user1034282

+0

请附上错误的详细信息,例如强制关闭/ –