2015-12-02 7 views
5

Ich möchte den Ort und die Uhrzeit und das Datum des ausgehenden Anrufs in android.Hier bin ich mit einem Broadcast-Empfänger für die Erkennung neuer ausgehenden Anrufe, innerhalb der Broadcast-Empfänger bin ich einen Dienst, der den Standort Empfänger implementiert, Um den aktuellen Standort für jeden neuen ausgehenden Anruf abzurufen, wird dieser ausgelöst.Wie erhalte ich den aktuellen Standort und die abgeholte Zeit des abgehenden Anrufs (genaue Anrufzeit)?

Meine Frage ist:

  • Ich möchte aktuellen Standort, Uhrzeit, Datum der abgehenden Anruf.

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

Dienst

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

Antwort

4

Verwenden Sie diesen Code für die Anrufenden

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

folgen dieser Tinte für mehr Klarheit http://stackoverflow.com/questions/21990947/detect- the-end-of-a-antworted-incoming-by-user-in-android-nicht-abgelehnt –

4

Google eingeführt Fused Location Provider api's über sein Google Play Service Framework, das super einfach zu benutzen ist als GPS/Network Location Anbieter.

Kompatibel bis API Level 8, jetzt, wenn ich dieses seltsame Problem des Netzwerkanbieters bekomme, gibt die gleiche Zeit Fused Location mir genaue Ort (ohne Neustart des Geräts).

ich hier ein Arbeits FusedLocation Testprojekt verpflichtet haben, können Sie sich selbst klonen und testen ..

LocationListener of NETWORK_PROVIDER is enabled but , onLocationChanged is never called

+1

danke für Ihre wertvolle Antwort @Anil Maloth –