5

Gpsの緯度と経度を取得しようとしていますが、SIMカードなしで緯度と経度を取得しようとすると、SIMカードを挿入するとすぐにすべての情報が提供される情報が提供されないというクエリがあります望ましい方法。

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

LocationListener mlocListener = new MyLocationListener();

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                   0, 0, mlocListener);

GPS_PROVIDER を使用していることがわかりますが、ネットワーク オペレータの助けがなければ緯度と経度を取得できません。誰か電話してもらえますか?


もう1つのことは、アプリケーションからGPSを開始および停止する方法は、特定の時間後にGPSを開始したいということであり、beslocationを取得したらすぐにオフにすることができます.

4

4 に答える 4

9

Android で GPS 位置情報を取得するためにネットワークにアクセスする必要はありません。しかし、インターネット接続により、位置情報の修正が約 5 分から 5 秒 (概算) に高速化されます。この改善は、スタンドアロン GPS ではなく、アシスト GPS (A-GPS)によってもたらされます。

GPS 携帯電話 (Android デバイスを含む) は、ネットワーク接続が利用可能かどうかを確認します。その場合、A-GPS サーバーから支援データをダウンロードし、それを使用して GPS チップセットで位置修正を計算します。そうでない場合、GPS チップセットは GPS 衛星からデータをダウンロードする必要があり、これには長い時間がかかります (レートは毎秒50ビットです!)。GPS 位置が計算されてからあまり時間が経っていない場合、このプロセスを高速化することもできます。

最初に:

  • マニフェストのアクセス許可に ACCESS_FINE_LOCATION を追加したことを確認してください
  • 電話の設定で GPS 衛星が有効になっていることを確認します
  • 屋内にいないことを確認してください (20,000 km 上空にある衛星からの信号は屋根や壁を嫌います)

次に、アプリを起動して待ちます。最初の修正が利用可能になるまで数分かかる場合があります。

アプリから GPS を開始することは可能のようですが ( Android でプログラムによって GPS を有効または無効にするにはどうすればよいですか? を参照してください)、方法がわかりません! 少なくとも、Taskerをダウンロードして、GPS を開始/停止するようにプログラムできます。

于 2011-02-08T21:05:47.247 に答える
0

これがボタンを使った私の主な活動であり、GPSをオフ状態からオンに切り替えるためにonClickListnerを設定しました。これを行うための許可は必要ありません。
Android 2.2でテストし、正常に動作しています。

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class GPSONOFFActivity extends Activity {
/** Called when the activity is first created. */
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b=(Button)findViewById(R.id.button1);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            toggleGPS(true);                
        }
    });
}

private void toggleGPS(boolean enable) {
    String provider = Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(provider.contains("gps") == enable) {
        return; // the GPS is already in the requested state
    }

    final Intent poke = new Intent();
    poke.setClassName("com.android.settings", 
        "com.android.settings.widget.SettingsAppWidgetProvider");
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
    poke.setData(Uri.parse("3"));
    this.sendBroadcast(poke);
 }
}
于 2012-05-23T10:55:56.723 に答える
0

あなたが抱えている問題の 1 つは、Android に「マップ」が組み込まれていないことかもしれません。マップは、携帯電話で必要になると、Google のサーバーからオンザフライで読み込まれます。たとえば、近隣の地図だけが必要な場合に、なぜ国全体の地図をロードするのでしょうか? それがその背後にある理論です。それはあなたの場所を取得し、それを Google のサーバーに送信し、必要と思われる地図を返します。もちろん、すべてのマップをデバイスにダウンロードした場合 (可能だと聞きましたが、完全にはわかりません)、おそらくそうではないでしょう...

編集: Google はマップのダウンロードを許可していません。(情報を提供してくれたAustynに感謝します)。

于 2011-02-08T20:43:42.807 に答える
0

これは時代遅れかもしれませんが、エラーが何であるか分かりますか?

「セルの位置情報を取得中にエラーが発生しました」というエラーが表示されます。

このエラーにつながるソース コードを見つけました。

private void requestRefLocation(int flags)
{
    TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
    {
        GsmCellLocation gsm_cell = (GsmCellLocation) phone.getCellLocation();
        if ((gsm_cell != null)
                && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
                && (phone.getNetworkOperator() != null)
                && (phone.getNetworkOperator().length() > 3))
        {
            int type;
            int mcc = Integer.parseInt(phone.getNetworkOperator().substring(0, 3));
            int mnc = Integer.parseInt(phone.getNetworkOperator().substring(3));
            int networkType = phone.getNetworkType();
            if (networkType == TelephonyManager.NETWORK_TYPE_UMTS
                    || networkType == TelephonyManager.NETWORK_TYPE_HSDPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSUPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSPA)
            {
                type = AGPS_REF_LOCATION_TYPE_UMTS_CELLID;
            }
            else
            {
                type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
            }
            native_agps_set_ref_location_cellid(type, mcc, mnc, gsm_cell.getLac(), gsm_cell.getCid());
        }
        else
        {
            Log.e(TAG, "Error getting cell location info.");
        }
    } else {
        Log.e(TAG, "CDMA not supported.");
    }
}

チェックステートメントに注意してください

if ((gsm_cell != null)
            && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
            && (phone.getNetworkOperator() != null)
            && (phone.getNetworkOperator().length() > 3))
    {

それはどういうわけかあなたが直面している問題につながります。もちろん、WIFI ネットワークに接続することで、別の方法で位置情報を取得できるため、位置情報を取得できます。これがあなたの質問に答えることを願っています。

于 2011-11-22T09:54:17.960 に答える