PhoneStateListener高版本获取不到来电手机号问题

都是网上提到的这个PhoneStateListener类,没啥区别,唯一注意的就是写的代码要在super之后 


private class MyPhoneStateListener extends PhoneStateListener {
   @Override
   public void onCallStateChanged(int state, String incomingNumber) {
      // TODO Auto-generated method stub
      super.onCallStateChanged(state, incomingNumber);

      switch (state) {
      case TelephonyManager.CALL_STATE_IDLE://空闲
         Log.i(TAG, "current state is IDLE.");
         break;
      case TelephonyManager.CALL_STATE_OFFHOOK://接听
         Log.i(TAG, "current state is OFFHOOK.");
         break;
      case TelephonyManager.CALL_STATE_RINGING://响铃状态
         String comePhoneNumber = incomingNumber;//来电手机号
         break;
      }

   }
}

然后添加权限:

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

//9.0之后新出的READ_CALL_LOG

<uses-permission android:name="android.permission.READ_CALL_LOG"/>

OK,完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据提供的引用内容,Android Studio本身并不能实现来电位置实时显示的功能。不过,你可以通过在应用中集成相关的API来实现该功能。具体来说,你可以使用Android TelephonyManager API来获取来电信息,使用Android Location API来获取设备位置信息,然后将这些信息结合起来在应用中实现来电位置实时显示的功能。 以下是一个简单的示例代码,演示如何使用TelephonyManager API获取来电信息和使用Location API获取设备位置信息: ```java import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView mLocationTextView; private TelephonyManager mTelephonyManager; private PhoneStateListener mPhoneStateListener; private LocationManager mLocationManager; private LocationListener mLocationListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLocationTextView = (TextView) findViewById(R.id.location_text_view); // 获取TelephonyManager实例 mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // 创建PhoneStateListener实例 mPhoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); // 当来电状态为响铃或接听时,获取来电位置信息并显示在TextView中 if (state == TelephonyManager.CALL_STATE_RINGING || state == TelephonyManager.CALL_STATE_OFFHOOK) { String location = getLocation(); mLocationTextView.setText(location); } } }; // 注册PhoneStateListener mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); // 获取LocationManager实例 mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 创建LocationListener实例 mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { // 当设备位置发生变化时,更新TextView中的位置信息 String locationStr = "Latitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude(); mLocationTextView.setText(locationStr); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }; // 检查是否已经获取了定位权限 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // 如果没有定位权限,则请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0); } else { // 如果已经获取了定位权限,则注册LocationListener mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener); } } @Override protected void onDestroy() { super.onDestroy(); // 取消注册PhoneStateListener和LocationListener mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); mLocationManager.removeUpdates(mLocationListener); } // 获取来电位置信息的方法 private String getLocation() { String locationStr = "Unknown"; // 检查是否已经获取了定位权限 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // 如果没有定位权限,则返回Unknown return locationStr; } // 获取最近一次的设备位置信息 Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { // 如果获取到了设备位置信息,则返回位置信息字符串 locationStr = "Latitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude(); } return locationStr; } } ``` 请注意,上述代码仅仅是一个示例,实际上你需要根据具体的需求和场景来编写代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值