2013-03-11 71 views
0

我試圖檢測我的設備上的GPS是否打開。無法返回布爾值從GPS檢查

目前,我只是返回一個布爾真或假的值,然後要麼繼續我的代碼,要麼引導用戶到GPS設置。

當我返回布爾值時,我的代碼崩潰了。我已經調試過它,但仍然無法看到它爲什麼會返回值。

下面是代碼:

GPSYesOrNo g = new GPSYesOrNo(this); 

    check = g.checkStatus(); 
    // check if GPS enabled 
    if (check == true) { 
    Intent Appoint = new Intent("com.example.flybaseapp.appointmantMenu"); 
    startActivity(Appoint); 
    } else { 
    alert(); 
    } 

而且GPSYesOrNo類:

public class GPSYesOrNo { 
    Context cc; 
    private LocationManager locationManager; 
    boolean enable; 

    public GPSYesOrNo(Context c) { 
     this.cc = c; 
     checkStatus(); 
    } 

    public boolean checkStatus() { 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     boolean enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

     if (enabled) { 
     return true; 
     } else { 
     return false; 
     } 
    } 
} 

任何人都可以看到,我錯了?

+0

郵政logcat的請。 – Egor 2013-03-11 20:52:49

+0

@Egor Logcat添加了 – user1352057 2013-03-11 20:59:21

+0

是否指定了'locationManager'?向我們展示代碼。 – 323go 2013-03-11 21:00:43

回答

1

您不應該擴展Activity,只需傳入上下文即可獲取locationManager。無論如何,你的應用程序崩潰,因爲你沒有與上下文參數調用構造函數。因此cc是空的。順便說getSystemService(cc.LOCATION_SERVICE)應getSystemService(Context.LOCATION_SERVICE)

變化

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

locationManager = (LocationManager) cc.getSystemService(Context.LOCATION_SERVICE); 
+0

感謝您的回答。我明白你說的關於傳遞上下文的意見。我將它改回到沒有活動類並編輯我的代碼。我在創建類的實例時傳遞上下文,然後通過構造函數簡單地調用方法。此刻我仍然收到一個錯誤,指出'方法getSystemService(字符串)未定義類型GPSYesOrNo' – user1352057 2013-03-11 23:46:43

+0

您必須將調用與在構造函數中傳遞的上下文前綴。類似ctx.getSystemService()其中ctx是上下文傳入。 – 2013-03-11 23:49:08

+0

Nyguyen非常感謝它正在工作。不能相信我設法得到一個簡單的構造函數對象如此搞砸。再次謝謝你。 – user1352057 2013-03-12 00:09:52

4

你分配啓用,不是在比較:

if(enable = true) 

將其更改爲==代替,你應該是好的。就像其他人說的那樣,if (enable)看起來會更乾淨。

更新:

隨着新的信息,看來你的LocationManager爲空時,你就可以調用isProviderEnabled。在調用checkStatus()之前驗證它是否設置正確。

+0

好的。在我看來,你也可以這樣做,「如果(啓用)」更清晰和更標準,但是或者將起作用 – codeMagic 2013-03-11 20:55:24

+0

實際上,'return enable;'將是最乾淨的。 – 323go 2013-03-11 20:56:48

+0

@ 323go好點 – codeMagic 2013-03-11 20:58:28