2013-06-04 33 views
6

Bây giờ câu hỏi là tại sao điện thoại của tôi (Galaxy Nexus, chỉ trong trường hợp) bắt đầu hiển thị biểu tượng GPS trên thanh trạng thái ngay khi ứng dụng bắt đầu, nhưng không phải khi tôi vào màn hình với bản đồ và bắt đầu làm việc với nó ? Tôi không cần phải theo dõi vị trí của mình và sử dụng pin khi tôi không ở trên màn hình bản đồ.

Ví dụ: Messenger ứng dụng cũng sử dụng GPS cho bản đồ nhưng biểu tượng chỉ hiển thị khi bạn mở màn hình bản đồ, không phải ngay trên hoạt động đầu tiên được khởi chạy.

Googled trong vài giờ nhưng không thấy gì cả. Bất kỳ trợ giúp nào sẽ được đánh giá cao!

được sửa đổi:

lớp MapActivity

private LocationListener mLocationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
    } 
    @Override 
    public void onProviderDisabled(String provider) { 
    } 
}; 

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    setContentView(R.layout.map_activity); 

    startGPS(); 
    initMap(); 
    mMapView = (MapView) findViewById(R.id.map_google_map); 
    mMapView.onCreate(null); 
    mGoogleMap = mMapView.getMap(); 
    if (mGoogleMap != null) { 
     customizeGoogleMap(); 
     loadAndFillMap(); 
    } 
} 

private void startGPS() { 
    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener); 
} 

private void initMap() { 
    try { 
     MapsInitializer.initialize(this); 
    } catch (GooglePlayServicesNotAvailableException e) { 
     e.printStackTrace(); 
    } 
} 

private void customizeGoogleMap() { 
    mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true); 
    mGoogleMap.setMyLocationEnabled(true); 
} 

private void loadAndFillMap() { 
    new LoadAndFillMapTask().execute(); 
} 

private class LoadAndFillMapTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     String address = Session.appData().getSelectedAddress(); 
     mMapLocation = Api.getMapApi().getMapLocation(address); 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     fillMap(); 
    } 
} 

private void fillMap() { 
    // filling Google Map with markers etc. 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mMapView != null) { 
     mMapView.onDestroy(); 
    } 
    mLocationManager.removeUpdates(mLocationListener); 
} 
+6

Chúng ta có thể thấy một số mã của các hoạt động chính xin vui lòng? – mithrop

+0

@mithrop Hoạt động chính có chứa hoàn toàn không có gì liên quan đến bản đồ google, tôi thành thật thấy không có điểm trong việc hiển thị những gì đang xảy ra ở đó. Hơn nữa các ứng dụng bắt đầu với màn hình giật gân (tại điểm đó biểu tượng GPS đã được hiển thị trong thanh trạng thái) mà chỉ chứa một ý định để hoạt động chính bị trì hoãn trong 1 giây. – Makks129

Trả lời

11

Sau một thời gian, chúng tôi phát hiện ra rằng vấn đề là ở Flurry SDK chúng tôi đã sử dụng trong dự án của chúng tôi ...

By Flurry mặc định bắt đầu báo cáo địa điểm ngay từ khi bắt đầu ứng dụng. Để tắt nó đi, chúng tôi đã sử dụng:

FlurryAgent.setReportLocation(false); 

.../_-

+2

Jesús ngọt ngào, tôi sẽ không bao giờ phát hiện ra những gì đã gây ra nó nếu nó không phải dành cho bạn! – Gerstmann

+0

@Gerstmann bạn được chào đón :) – Makks129

+0

Tôi bắt đầu xóa mọi thứ trong ứng dụng của mình và bắt đầu bật lại từng bit mã để tìm hiểu rằng đó là Flurry. Sau đó, với một tìm kiếm có đưa ra câu hỏi của bạn và trả lời. Tôi ước gì tôi đã tìm thấy nó trước đó –

0

Bạn sẽ phải thực hiện các phương pháp tiếp của địa điểm quyến rũ: Sử dụng GPS (chỉ khi nó là trên), sau đó Wifi, và sau đó kết nối dữ liệu. Ngoài ra, bên cạnh FINE_LOCATION, sử dụng sau đây too--

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 
+0

Bạn có thể vui lòng cụ thể hơn về "phương pháp tìm nạp địa điểm liên tiếp" không? Ngoài tài liệu trên ACCESS_MOCK_LOCATION, bạn có thể thấy nó được sử dụng cho mục đích thử nghiệm. – Makks129

+0

Hãy thử đi theo liên kết-- http://developer.android.com/guide/topics/location/strategies.html Nếu bạn cần mã chi tiết, vui lòng cho biết và tôi sẽ đăng nó như một câu trả lời khác tại đây –

+0

Cảm ơn câu trả lời của bạn, Kunal. Tôi đã thêm một số mã của lớp bản đồ của mình ở trên. Tôi đã cố gắng sử dụng một cách tiếp cận được mô tả trong liên kết bạn đã đưa ra: xem mLocationListener, phương thức startGPS, phương thức onDestroy. Tuy nhiên trên Galaxy Nexus GPS của tôi vẫn bắt đầu ngay từ khi bắt đầu ứng dụng, không phải khi tôi nhập hoạt động trên bản đồ. – Makks129

0

Tôi không chắc chắn cho dù đó là giải pháp tốt nhất nhưng tôi đã sử dụng this approach.

Trong hoạt động khởi đầu của tôi, tôi làm như thế này:

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    if (GpsUtils.canToggleGps(this)) { 
     GpsUtils.turnGpsOff(this); 
    } 
    //... 
} 

Và trong MapActivity tôi: biểu tượng

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    if (GpsUtils.canToggleGps(this)) { 
     GpsUtils.turnGpsOn(this); 
    } 
    //... 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (GpsUtils.canToggleGps(this)) { 
     GpsUtils.turnGpsOff(this); 
    } 
    //... 
} 

GPS trong thanh trạng thái không làm phiền tôi nữa.

Các vấn đề liên quan