监听Android手机的呼叫状态

开发应用程序的时候,我们希望能够监听电话的呼入,以便执行暂停音乐播放器等操作,当电话结束之后,再次恢复播放。在Android平台可以通过TelephonyManager和PhoneStateListener来完成此任务。

  TelephonyManager作为一个Service接口提供给用户查询电话相关的内容,比如IMEI,LineNumber1等。通过下面的代码即可获得TelephonyManager的实例。

  TelephonyManager mTelephonyMgr = (TelephonyManager) this
    .getSystemService(Context.TELEPHONY_SERVICE);

  在Android平台中,PhoneStateListener是个很有用的监听器,用来监听电话的状态,比如呼叫状态和连接服务等。其方法如下所示:

public void onCallForwardingIndicatorChanged(boolean cfi)
public void onCallStateChanged(int state, String incomingNumber)
public void onCellLocationChanged(CellLocation location)
public void onDataActivity(int direction)
public void onDataConnectionStateChanged(int state)
public void onMessageWaitingIndicatorChanged(boolean mwi)
public void onServiceStateChanged(ServiceState serviceState)
public void onSignalStrengthChanged(int asu)

  这里我们只需要覆盖onCallStateChanged()方法即可监听呼叫状态。在TelephonyManager中定义了三种状态,分别是振铃(RINGING),摘机(OFFHOOK)和空闲(IDLE),我们通过state的值就知道现在的电话状态了。

  获得了TelephonyManager接口之后,调用listen()方法即可监听电话状态。

  mTelephonyMgr.listen(new TeleListener(),
    PhoneStateListener.LISTEN_CALL_STATE);

  下面是个简单的测试例子,只是把呼叫状态追加到TextView之上。

package com.j2medev;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.TextView;

public class Telephony extends Activity {

 private static final String TAG = "Telephony";
 TextView view = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  TelephonyManager mTelephonyMgr = (TelephonyManager) this
    .getSystemService(Context.TELEPHONY_SERVICE);
  mTelephonyMgr.listen(new TeleListener(),
    PhoneStateListener.LISTEN_CALL_STATE);
  view = new TextView(this);
  view.setText("listen the state of phone\n");
  setContentView(view);
 }

 class TeleListener extends PhoneStateListener {

  @Override
  public void onCallStateChanged(int state, String incomingNumber) {
   super.onCallStateChanged(state, incomingNumber);
   switch (state) {
   case TelephonyManager.CALL_STATE_IDLE: {
    Log.e(TAG, "CALL_STATE_IDLE");
    view.append("CALL_STATE_IDLE " + "\n");
    break;
   }
   case TelephonyManager.CALL_STATE_OFFHOOK: {
    Log.e(TAG, "CALL_STATE_OFFHOOK");
    view.append("CALL_STATE_OFFHOOK" + "\n");
    break;
   }
   case TelephonyManager.CALL_STATE_RINGING: {
    Log.e(TAG, "CALL_STATE_RINGING");
    view.append("CALL_STATE_RINGING" + "\n");
    break;
   }
   default:
    break;
   }
  }

 }

}

  不要忘记在AndroidManifest.xml里面添加个permission.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
监听 Android 设备的 WiFi 状态,可以使用以下代码: 首先,在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> ``` 然后,在你的 Activity 或 Service 中创建一个 BroadcastReceiver,并在其中处理 WiFi 状态变化的逻辑。示例代码如下: ```java public class WifiBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action != null && action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: // WiFi 已经打开 break; case WifiManager.WIFI_STATE_DISABLED: // WiFi 已经关闭 break; case WifiManager.WIFI_STATE_UNKNOWN: // WiFi 状态未知 break; } } } } ``` 最后,在你的 Activity 或 Service 中注册 BroadcastReceiver。示例代码如下: ```java public class MainActivity extends AppCompatActivity { private WifiBroadcastReceiver wifiBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wifiBroadcastReceiver = new WifiBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); registerReceiver(wifiBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(wifiBroadcastReceiver); } } ``` 这样,当 WiFi 状态发生变化时,就会触发 BroadcastReceiver 中的 onReceive() 方法,你就可以在其中处理相应的逻辑了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值