2015-12-02 19 views
5

Chcę uzyskać lokalizację i godzinę i datę połączenia wychodzącego w Androidzie. Tutaj używam jednego odbiornika do wykrywania nowych połączeń wychodzących, w odbiorniku transmisji uruchamiam jedną usługę, która może zaimplementować odbiornik lokalizacji, aby uzyskać bieżącą lokalizację dla każdego nowego połączenia wychodzącego, uruchomi się.Jak uzyskać aktualną lokalizację i czas połączenia wychodzącego (dokładny czas połączenia)?

Moje pytanie brzmi:

  • chcę bieżącą lokalizację, czas, datę połączenia wychodzącego.

Broadcast Receiver

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(); 
    } 
    } 
} 

usługi

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(); 
} 
} 

Odpowiedz

4

użyć tego kodu do zakończeń połączeń

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; 
+2

obserwować tą farbę dla większej jasności http://stackoverflow.com/questions/21990947/detect- koniec-of-an-answer-incoming-call-by-user-in-android-not-inclined –

4

Google wprowadził Dostawcy usług Fused Location Provider za pośrednictwem usługi Google Play Service Framework, która jest bardzo łatwa w użyciu niż dostawcy lokalizacji GPS/Network.

Kompatybilny interfejs API do poziomu 8, teraz, gdy otrzymuję ten dziwny numer dostawcy sieci, w tym samym czasie Fused Location zapewnia dokładną lokalizację (bez restartu urządzenia).

mam popełnił jeden pracuje FusedLocation Test Project tutaj można sklonować i przetestować samemu ..

LocationListener of NETWORK_PROVIDER is enabled but , onLocationChanged is never called

+1

dzięki za twoją cenną odpowiedź @Ailil Maloth –