0

Googleマップを使用し、現在の場所を表示する機能を備えたAndroidアプリがあります。「GPSをオンにしているのに現在地が出てこない」というご意見を多数いただいております。いくつかのデバイスで試してみましたが、問題は見られませんでしたが、昨日、以前は正常に機能していた電話でも問題に直面しました。

私が考え出した解決策は、現在の場所が表示されない場合、wi-fi をオフにしてモバイル インターネットを使用して現在の場所を取得すると、表示されるようになることです。少し奇妙に思えるかもしれませんが、私にとってはうまくいきました。何か不足している場合は、コードに必要な変更を提案してください。アプリ ユーザーに上記の回避策を提案することはできません。

locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
boolean enabled = locMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);
cEnabled = getIntent().getExtras().getBoolean("cEnabled");

if (!enabled && !cEnabled) {
    AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
    alt_bld.setMessage("Would you like to activate GPS?\n(recommended- Yes)")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        })
        .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                 dialog.cancel();
            }
        });

    AlertDialog alert = alt_bld.create();
    // Title for AlertDialog
    alert.setTitle("Activate GPS?");
    // Icon for AlertDialog
    alert.setIcon(R.drawable.location1);
    alert.show();       
}  

ImageButton clocButton = (ImageButton) findViewById(R.id.cLoc);
clocButton.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
    getToMyLocation();
        return false;
    }
});

private void getToMyLocation() {
    mapView.invalidate();
    Criteria criteria = new Criteria();
    String provider = locMgr.getBestProvider(criteria, false);
    Location lastLoc = locMgr.getLastKnownLocation(provider);
    if(lastLoc != null) {
        GeoPoint lastPoint = new GeoPoint((int)(lastLoc.getLatitude()*1E6), (int)(lastLoc.getLongitude()*1E6));
        center = lastPoint;
        showLocation(lastPoint);
    }
    else
    {
        Toast.makeText(mContext, "Waiting for current location", Toast.LENGTH_SHORT).show();
    }

    myLocOverlay.enableMyLocation();
    myLocOverlay.runOnFirstFix(new Runnable() {
        public void run() {
            GeoPoint loc = myLocOverlay.getMyLocation();
            mapView.getController().setCenter(loc);
            center = loc;
        }
    });
}

private void showLocation(GeoPoint location) {
    if (location != null) {
        myLocOverlay.enableMyLocation();
        mapView.getController().animateTo(location);
    }
}

マニフェスト ファイルに次の権限を追加しました。

<uses-permission android:name="android.permission.INTERNET" />
<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_NETWORK_STATE"/>
4

1 に答える 1

0

以前に Android Developers のMaking Your App Location-Awareチュートリアルを使用したことがありますが、うまくいきました。これに目を通して、自分のコードと比較しましたか?

欠けているものや、その一部を実装するためのより良い方法が表示され、これらの問題が解決される場合があります。

于 2012-12-17T09:11:52.953 に答える