2012-02-29 9 views
2

私はあなたのために謎を持っています! 2.2(Froyo)を実行しているSamsung Galaxyのテスト用電話機で、以下のコードを実行することができます。 2.3.4(Gingerbread)を実行している私のHTC Thunderboltテスト電話では動作しません。これは位置情報を収集するときに得られるほど簡単ですが、同じ結果を示すhereのベストプラクティスも実装しています:Froyo is go、Gingerbread is dead。onLocationChangedがジンジャーブレッドで呼び出されない

この問題を解決するために何を試してください。それは私のコードですか?それはハードウェア、ソフトウェアですか?パーミッション?私はコンピュータサイエンスの神々を怒らせましたか?私は解決策につながる示唆で与えられた最初の答えを受け入れます。助けてくれてありがとう!

My活動:

import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
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.Toast; 

public class SimpleLocationProjectActivity extends Activity { 

    private LocationManager mLocationManager; 
    private MyLocationListener mLocationListener; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     mLocationListener = new MyLocationListener(); 

    } 

    @Override 
    protected void onPause() { 
     mLocationManager.removeUpdates(mLocationListener); 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Log.i("SIMPLE APP", "Starting location services."); 
     List<String> providers = mLocationManager.getAllProviders(); 
     for (int i = 0 ; i < providers.size(); i++){ 
      mLocationManager.requestLocationUpdates(providers.get(i), 1, 1, mLocationListener); 
     } 

    } 

    public class MyLocationListener implements LocationListener{ 

     @Override 
     public void onStatusChanged(String provider, int status, 
       Bundle extras) { 
      String statusStr; 
      switch (status){ 
      case LocationProvider.OUT_OF_SERVICE: 
       statusStr = "Out of Service"; 
       break; 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       statusStr = "Temporarily unavailable"; 
       break; 
      case LocationProvider.AVAILABLE: 
       statusStr = "Available"; 
       break; 
      default: 
       statusStr = "Huhhh??"; 
      } 
      Log.i("SIMPLE APP", "Provider: " + provider + " Status is: " + statusStr); 


     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Log.i("SIMPLE APP", "Provider: " + provider + " is enabled."); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.i("SIMPLE APP", "Provider: " + provider + " is disabled."); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      double latitute = location.getLatitude(); 
      double longitude = location.getLongitude(); 
      Toast.makeText(SimpleLocationProjectActivity.this, "Lat is " + latitute + " and lng is " + longitude, Toast.LENGTH_SHORT).show(); 

      //This never gets called on my HTC Thunderbolt... 
      Log.i("SIMPLE APP", "Provider: " + location.getProvider() + " Lat is " + latitute + " and lng is " + longitude); 
     } 
    } 
} 

私のマニフェスト:

<?xml version="1.0" encoding="UTF-8"?> 
<manifest android:versionCode="1" android:versionName="1.0" 
    package="com.silithcrowe.simplelocationproject" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <uses-sdk android:minSdkVersion="8"/> 
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 
     <activity android:label="@string/app_name" android:name=".SimpleLocationProjectActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

EDIT:logcatのサンプルが動作している間:位置情報の更新が要求されているlogcatの

03-01 11:37:43.529: D/RPC(1662): read RPC packet 
03-01 11:37:43.529: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.529: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.529: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.529: D/RPC(1662): read RPC packet 
03-01 11:37:43.529: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.529: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.529: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.529: D/RPC(1662): read RPC packet 
03-01 11:37:43.529: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.529: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.529: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.529: D/RPC(1662): read RPC packet 
03-01 11:37:43.529: D/RPC(1662): read RPC packet size: [96] 
03-01 11:37:43.529: V/locapi_rpc_glue(1662): Callback received: 2 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.529: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.529: D/RPC(1662): read RPC packet 
03-01 11:37:43.529: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.529: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.529: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.539: D/RPC(1662): read RPC packet 
03-01 11:37:43.539: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.539: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.539: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.539: D/RPC(1662): read RPC packet 
03-01 11:37:43.539: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.539: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.539: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.539: D/RPC(1662): read RPC packet 
03-01 11:37:43.539: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:43.539: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:43.539: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:43.559: D/lib_locapi(1662): loc_eng_report_sv: valid_mask = 0x30, num of sv = 0 
03-01 11:37:43.559: D/GpsLocationProvider(1662): reportSvStatus 
03-01 11:37:44.410: D/RPC(1662): read RPC packet 
03-01 11:37:44.410: D/RPC(1662): read RPC packet size: [208] 
03-01 11:37:44.410: V/locapi_rpc_glue(1662): Callback received: 1 (cb_id=0x67E0001 handle=2) 
03-01 11:37:44.410: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:44.410: D/lib_locapi(1662): loc_eng_report_position: valid mask = 0x61ed, sess status = 1 
03-01 11:37:44.520: D/RPC(1662): read RPC packet 
03-01 11:37:44.520: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:44.520: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:44.520: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:44.520: D/RPC(1662): read RPC packet 
03-01 11:37:44.520: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:44.520: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:44.520: D/RPC(1662): written RPC packet size: [28] 
03-01 11:37:44.520: D/RPC(1662): read RPC packet 
03-01 11:37:44.520: D/RPC(1662): read RPC packet size: [272] 
03-01 11:37:44.520: V/locapi_rpc_glue(1662): Callback received: 4 (cb_id=0x67E0001 handle=2) 
03-01 11:37:44.520: D/RPC(1662): written RPC packet size: [28] 

サンプル:

を 歩きながら、またはlogcat出力に接続されたUSBであなたのdevのマシンの前に座っている間
+0

log.iのものから得られるログ出力をいくつか含めることができますか? – mmeyer

+0

完了。私は[updateProvidersLocked]が最も多くのアラームを発生させると思うが、Googleは最初に試してみたことがない。 – SilithCrowe

+0

ところで、友人たちは、私は言及するのを忘れていました。私がGoogle Mapsに入ると、それは私の瞬間を平らにします。他のアプリも場所を取得するのに問題はないようです。 – SilithCrowe

答えて

0

onCreate()機能でこのコードを再利用してください、

List<String> providers = mLocationManager.getAllProviders(); 
     for (int i = 0 ; i < providers.size(); i++){ 
      mLocationManager.requestLocationUpdates(providers.get(i), 1, 1, mLocationListener); 
     } 
+0

*移動*と*コピー*の両方をonCreateにしようとしましたが、運はありません。ログステートメントが期待どおりに表示されるため、onResume()が確実に呼び出されています: "Starting location services。" – SilithCrowe

0

は、あなたのこれをテストしていますか?これらのparamsは、ハードウェアの更新を生成する速度を絞る

requestLocationUpdates(providers.get(i), 1, 1, mLocationListener) 

:私の2.3.4は、第2および第3のparamsは約厳しくされていると思われます。現在使用しているものは、場所が1メートル以上変化し、毎秒よりも頻繁に変化しない場合にのみ、私に最新情報を与えます。 Location Manager docs

から

minDistanceが0より大きい場合は、位置のみ 放送されるminDistanceメーターによるデバイス移行します。できるだけ頻繁に という通知を受け取るには、両方のパラメータを0に設定してください。

違いがあるかどうかを確認してください。そうでない場合は、logcatの出力を投稿してより多くのアイデアを得てください。

requestLocationUpdates(providers.get(i), 0, 0, mLocationListener) 
+0

ああ、私はそれらを1に偶然残したと思う。値をゼロに変更しましたが、問題は解決しませんでした。私はあなたのためにいくつかのログを投稿しました - すべての出力を投稿することができたら嬉しいですが、私のキャラクターの限界に達しました。 – SilithCrowe

0

Googleの位置情報サービスを有効にしていないことに気付くまで、Androidタブレットで同じ問題が発生していました。私がそれをやろうとしたら、onLocationChangedは私が接続していたWiFiネットワークに基づいてアップデートを提供し始めました。これを有効にする方法についてはhelp documentを参照してください(ほとんどのAndroid搭載端末では設定 - >場所)。

関連する問題