【问题标题】:various phone states differentiation各种电话状态区分
【发布时间】:2017-07-04 10:59:43
【问题描述】:

如何区分来电和去电? 对于这两种情况,手机都处于摘机状态,但对于来电,它处于振铃状态,然后转到摘机状态,

我试过这段代码,但它不能有效地工作,因为一个响铃变量总是假的。 还有另一个问题我怎样才能得到拨出电话号码..提前谢谢

public class states extends BroadcastReceiver {
boolean Ringing = false;

public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) {
 Toast.makeText(context, "Ringing", Toast.LENGTH_SHORT).show();
        Ringing = true ;
 }
    else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
        if (Ringing) {
            // do nothing
        }else{
           // do something
}
 else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) {
        Ringing = false ;
    }
}
}

这是我的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


  <receiver android:name=".states">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
    </receiver>

【问题讨论】:

  • 对于您的问题,如果您提出电话号码,这意味着您愿意获得自己的联系电话。不是吗?
  • 不,我是指我要拨打的号码..
  • 我刚刚编辑了答案并请检查 TelephonyManager.CALL_STATE_IDLE
  • 不幸的是,我仍然遇到同样的问题..你能检查我的权限吗?我在问题中添加了它们,这可能是问题

标签: java android phone-call


【解决方案1】:

为了区分来电和去电,您可以为此使用广播接收器: 在您的接收器中添加 &lt;action android:name="android.intent.action.NEW_OUTGOING_CALL" /&gt; 并在您的 onReceive() 方法中处理它。

<receiver android:name=".IncomingCallReceiver" >
    <intent-filter >             
       <action android:name="android.intent.action.PHONE_STATE" />
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" />             
    </intent-filter>
</receiver>

用于获取拨出号码

public void onReceive(Context context, Intent intent)
{
    String state=intent.getStringExtra(TelephonyManager.EXTRA_STATE);

    if(state==null)
    {
        //Outgoing call
        String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Log.i("tag","Outgoing number : "+number);
    }
    else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING))
    {
        //Incoming call
        String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
        Log.i("tag","Incoming number : "+number);
    }
}

【讨论】:

  • 我试过了,但没有“空”状态,它不是挂机就是空闲..即使我将状态更改为 if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK) || 状态。 equals(TelephonyManager.EXTRA_STATE_IDLE) ) 我没有得到拨出号码..
  • 它工作了......我添加了这个权限 并且它得到了空状态和传出号码......谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2011-09-04
  • 1970-01-01
相关资源
最近更新 更多