2016-03-30 1 views
0

私は自分の位置に基づいてユーザーの呼び出し音を消すアプリを作っています。私はバックグラウンドで実行されるサービスを持っており、数秒ごとにユーザーの場所を取得する必要があります。 LocationListenerを使用していますので、サービスのonStartメソッド内にonLocationChangedを配置しようとしましたが、許可されませんでした。だから、ハンドラーを使って5秒ごとにユーザーの所在地をリクエストしてバッテリーを消耗させるかどうかは疑問だ。私は周りに移動することによって、アプリケーションをテストすることはできませんので、私はonLocationChangedが呼び出されるかどうかわからないので、これをやっている。ハンドラを使用して数秒ごとに位置を要求すると、携帯電話のバッテリが消耗しますか?

public class myService extends Service implements LocationListener { 
Double lat; 
Double lng; 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // Let it continue running until it is stopped. 
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 





    return START_STICKY; 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 

} 



@Override 
public void onLocationChanged(Location location) { 

    if (MainActivity.location != null) { 


     lat = MainActivity.location.getLatitude(); 

     lng = MainActivity.location.getLongitude(); 


     if (MainActivity.placeArrayList.size() != 0) { 
      for (int i = 0; i < MainActivity.placeArrayList.size(); i++) { 


       Log.e("hello", String.valueOf(Float.parseFloat(MainActivity.latitudeArrayList.get(i)))); 

       MainActivity.destination.setLatitude(Double.parseDouble(MainActivity.latitudeArrayList.get(i))); 
       MainActivity.destination.setLongitude(Double.parseDouble(MainActivity.longitudeArrayList.get(i))); 
       Log.e("distancemeters", String.valueOf(MainActivity.location.distanceTo(MainActivity.destination))); 

       if (MainActivity.location.distanceTo(MainActivity.destination)<100) { 




        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

        audioManager.setStreamVolume(AudioManager.STREAM_RING, AudioManager.RINGER_MODE_SILENT, AudioManager.FLAG_SHOW_UI); 


       } else { 



       } 

      } 


     } 
    } 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 
} 
+0

Battery_Savingモードを使用していない場合、数秒ごとに場所を要求すると、確実にバッテリーが消耗します。 また、電話が動いていない場合、なぜ数秒ごとにこれを呼び出す必要がありますか? – Dus

+0

@HadasM場所を継続的に取得する方法がわからないため、サービスでonLocationChangedを呼び出す方法が見つかりません – felix

答えて

-1

これは、ユーザーの場所を取得する方法ではありません。試してみてくださいthis。 機能をテストしたい場合は、Android Emulator + Android Device Monitorを使用してください。ここで、ユーザーの場所を設定および変更できます。

関連する問題