1

コードを使用して 30 秒の間隔と 30 メートルの距離の後に mp3 サウンドを再生しましたが、モバイルがスリープ状態になった後は再生されず、5 マイル以上移動しました。

上記のコードを機能させる方法は?助けてください。

前もって感謝します。

アドオン クエリがありました: onLocationChanged メソッドは私の最後の場所を知っていますか? つまり、このステートメントを実行した場合:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30, 30000, new MyLocationListener());

mp3 ファイルは 30 秒間隔ごとに 30 mts の距離だけ実行されますか? または、次のように ScheduledExecutorService 内でステートメントを実行する必要がありますか?

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
        executor.scheduleWithFixedDelay(new Runnable(){

            public void run() {

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30, 30000, new MyLocationListener());



            }

        }, 0, 600, TimeUnit.SECONDS);

合計コード:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30, 30000, new MyLocationListener());





private class MyLocationListener implements LocationListener {


    public void onLocationChanged(Location location) {


        ///Audio file which plays everytime the above condition is met 
        mp3.start();



        );

        Toast.makeText(AndroidGPSSampleActivity.this, message, Toast.LENGTH_LONG).show();
    }

    public void onStatusChanged(String s, int i, Bundle b) {

        Toast.makeText(AndroidGPSSampleActivity.this, "Provider status changed",Toast.LENGTH_LONG).show();
    }

    public void onProviderDisabled(String s) {

        Toast.makeText(AndroidGPSSampleActivity.this,"Provider disabled by the user. GPS turned off",Toast.LENGTH_LONG).show();
    }

    public void onProviderEnabled(String s) {
        System.out.println("==onProviderEnabled=" + s);
        Toast.makeText(AndroidGPSSampleActivity.this, "Provider enabled by the user. GPS turned on",Toast.LENGTH_LONG).show();
    }


}
4

1 に答える 1

2

まず、位置パラメータが意図したとおりであることを確認する必要があると思います。30 という時間は、実際には 30 ミリ秒を意味します。30 * 1000 が必要だと思います。距離は 30000 メートルで、約 18 マイルです。ですから、あなたは 30000 ではなく 30 を望んでいたと思います。

これで、場所が実際に変更された場合にのみ、これらのパラメーターに従って通知されます。そのため、30 秒以内に位置が同じか、最後の位置から 30 メートル以内にある場合は通知されません。さらに、ネットワーク プロバイダーを使用しています。Wi-Fi の場所がある場合、精度は 60 メートルです。これは、通知を受け取るまでにかなり移動する必要があることを意味します。セル タワーの場所を取得している場合は、セル タワー、つまり場所を切り替えるまでに長い道のりを歩んでいる可能性があります。

于 2013-02-11T21:25:29.310 に答える