Как получить текущее местоположение и время снятия трубки исходящего звонка (точное время выбора звонка)?

Я хочу получить местоположение, время и дату исходящего вызова в Android. Здесь я использую один широковещательный приемник для обнаружения новых исходящих вызовов, в широковещательном приемнике я запускаю одну службу, которая может реализовать приемник местоположения, для получения текущее местоположение для каждого нового исходящего вызова, он будет запускаться.

Мой вопрос:

  • Я хочу текущее местоположение, время, дату исходящего звонка.

Приемник вещания

public class OutGoingCallReceiver extends BroadcastReceiver {
public static String phoneNumber;

@Override
public void onReceive(Context context, Intent intent) {

    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    if (state == null) {

        phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Intent serviceIntent = new Intent(context, NarenService.class);
        context.startService(serviceIntent);
        Toast.makeText(context, "Calling..to  " + phoneNumber, Toast.LENGTH_SHORT).show();
    }
  }
}

Сервис

public class NarenService extends Service implements LocationListener {
SQLiteDatabase db;
double lat, lon;
LocationManager locationManager;
String provider;

DataProvider dataProvider;
Cursor cursor;
private static final String TAG = "NarenService";

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    getLocation();
   // OutGoingCallReceiver.phoneNumber = str;
    //  OutGoingCallReceiver outGoingCallReceiver = new OutGoingCallReceiver()
    dataProvider = new DataProvider(this);
    if (lon != 0.0 && lat != 0.0) {
        dataProvider.open();

        dataProvider.insertEntry(lon, lat, OutGoingCallReceiver.phoneNumber);
        Log.v(TAG, "Inserted data");
        // dataProvider.close();
        Toast.makeText(getBaseContext(), "Lat : " + lat + "\n lon : " + lon + "\n num :" + OutGoingCallReceiver.phoneNumber, Toast.LENGTH_SHORT).show();
    }

    stopSelf();
    return START_STICKY;
}

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


private void getLocation() {
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);

    if (provider != null && !provider.equals("")) {

        // Get the location from the given provider
        Location location = locationManager.getLastKnownLocation(provider);
        locationManager.requestLocationUpdates(provider, 60000, 10, this);

        if (location != null) {
            Log.v(TAG, "Entered into loc");
            onLocationChanged(location);
        } else
            Toast.makeText(getBaseContext(), "Location can't be retrieved", Toast
                    .LENGTH_SHORT).show();

    } else {
        Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
    }

}

@Override
public void onLocationChanged(Location location) {
    lat = location.getLatitude();
    lon = location.getLongitude();
}

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

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

@Override
public void onDestroy() {
    super.onDestroy();
    //  dataProvider.close();
    Toast.makeText(this, "service stopped", Toast.LENGTH_SHORT).show();
}
}

person Narendra Baratam    schedule 02.12.2015    source источник


Ответы (2)


Используйте этот код для завершения вызова

case TelephonyManager.CALL_STATE_IDLE:
                //Went to idle-  this is the end of a call.  What type depends on previous state(s)
                if(lastState == TelephonyManager.CALL_STATE_RINGING){
                    //Ring but no pickup-  a miss
                    onMissedCall(savedNumber, callStartTime);
                }
                else if(isIncoming){
                    onIncomingCallEnded(savedNumber, callStartTime, new Date());                        
                }
                else{
                    onOutgoingCallEnded(savedNumber, callStartTime, new Date());                                                
                }
                break;
person Kiran Kumar    schedule 14.12.2015
comment
следуйте этим чернилам для большей ясности « title = «обнаружить окончание ответа на входящий вызов пользователя в Android не отклонено»> stackoverflow.com/questions/21990947/ - person Kiran Kumar; 14.12.2015

Google представил API-интерфейс Fused Location Provider через свою платформу Google Play Service Framework, которая очень проста в использовании, чем поставщики GPS / Network Location.

Совместимость до уровня API 8, теперь, когда я получаю эту странную проблему с сетевым провайдером, в то же время Fused Location дает мне точное местоположение (без перезагрузки устройства).

Я зафиксировал здесь один рабочий тестовый проект FusedLocation, вы можете клонировать и протестировать себя.

LocationListener NETWORK_PROVIDER включен, но onLocationChanged никогда не вызывается< /а>

person Anil Kumar    schedule 17.12.2015