如何获取当前位置和拨出电话摘机时间(确切的呼叫选择时间)?

时间:2015-12-02 06:50:07

标签: android broadcastreceiver telephonymanager

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

2 个答案:

答案 0 :(得分:4)

将此代码用于呼叫结束

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;

答案 1 :(得分:4)

Google通过其Google Play服务框架推出了融合位置提供商API,该框架比GPS /网络位置提供商更易于使用。

兼容API级别8,现在当我遇到网络提供商的这个奇怪问题时,同时Fused Location为我提供了准确的位置(无需重启设备)。

我已经在这里提交了一个有效的FusedLocation测试项目,你可以自己克隆和测试..

LocationListener of NETWORK_PROVIDER is enabled but , onLocationChanged is never called

相关问题