当前位置:首页 » 安卓系统 » android挂电话

android挂电话

发布时间: 2022-12-06 10:04:07

‘壹’ Android蓝牙耳机接听挂断电话流程

一、alps/packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetStateMachine.java

processAnswerCall

这个方法就是接听电话 我们来往上走 还是
alps/packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetStateMachine.java

原来是jni回调java。

alps/packages/apps/Bluetooth/jni/com_android_bluetooth_hfp.cpp

alps/packages/apps/Bluetooth/jni/com_android_bluetooth_hfp.cpp

alps/packages/apps/Bluetooth/jni/com_android_bluetooth_hfp.cpp

alps/packages/apps/Bluetooth/jni/com_android_bluetooth_hfp.cpp

alps/packages/apps/Bluetooth/jni/com_android_bluetooth_hfp.cpp

alps/system/bt/btif/src/btif_hf.c

alps/system/bt/btif/src/btif_hf.c

alps/system/bt/btif/src/btif_hf.c

alps/hardware/libhardware/include/hardware/bt_hf.h

好了 跟踪完了

logcat | grep "AT cmd"

第一个是接听 第二个是挂断

再往下跟

p_cmd_cback

alps/system/bt/bta/ag/bta_ag_at.c

bta_ag_process_at

alps/system/bt/bta/ag/bta_ag_at.c

system/bt/bta/ag/bta_ag_act.c

‘贰’ 安卓智能机为什么拨打电话就自己挂断了

安卓智能机拨打电话出现自己挂断现象的原因有以下几种可能:

1、手机信号不佳。通信双方中的一方位置处于信号盲区时就会产生因无信号导致手机自动挂断的情况,针对这类情况,需要到信息较强的地方去打接电话;

‘叁’ android怎么实现自动接听和挂断电话功能

android 实现来电自动接听和自动挂断的方法:
第一步:准备应用环境需要的系统包和aidl文件。
(1)在应用中创建包:android.telephony
将android系统框架下的\framework\telephony\java\android\telephony目录中的NeighboringCellInfo.aidl文件复制到上面创建的包(android.telephony )中;
(2)在应用中创建包:com.android.internal.telephony
将android系统框架下的\framework\telephony\java\com\android\internal\telephony目录中的ITelephony.aidl文件复制到上面创建的包(com.android.internal.telephony )中。
第二步:创建一个获取ITelephony的方法
PhoneUtils.java
package com.zhouzijing.android.demo;

import java.lang.reflect.Method;
import com.android.internal.telephony.ITelephony;
import android.telephony.TelephonyManager;

public class PhoneUtils {
/**
* 根据传入的TelephonyManager来取得系统的ITelephony实例.
* @param telephony
* @return 系统的ITelephony实例
* @throws Exception
*/
public static ITelephony getITelephony(TelephonyManager telephony) throws Exception {
Method getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);//私有化函数也能使用
return (ITelephony)getITelephonyMethod.invoke(telephony);
}
}

第三步:创建电话广播拦截器
MyPhoneBroadcastReceiver.java
package com.zhouzijing.android.demo;

import com.android.internal.telephony.ITelephony;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;

public class MyPhoneBroadcastReceiver extends BroadcastReceiver {

private final static String TAG = MyPhone.TAG;

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "[Broadcast]"+action);

//呼入电话
if(action.equals(MyPhone.B_PHONE_STATE)){
Log.i(TAG, "[Broadcast]PHONE_STATE");
doReceivePhone(context,intent);
}
}

/**
* 处理电话广播.
* @param context
* @param intent
*/
public void doReceivePhone(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(
TelephonyManager.EXTRA_INCOMING_NUMBER);
TelephonyManager telephony = (TelephonyManager)context.getSystemService(
Context.TELEPHONY_SERVICE);
int state = telephony.getCallState();

switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.i(TAG, "[Broadcast]等待接电话="+phoneNumber);
try {
ITelephony iTelephony = PhoneUtils.getITelephony(telephony);
iTelephony.answerRingingCall();//自动接通电话
//iTelephony.endCall();//自动挂断电话
} catch (Exception e) {
Log.e(TAG, "[Broadcast]Exception="+e.getMessage(), e);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG, "[Broadcast]电话挂断="+phoneNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG, "[Broadcast]通话中="+phoneNumber);
break;
}
}

}

第四部:注册电话广播拦截器
MyPhone.java
package com.zhouzijing.android.demo;

import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;

public class MyPhone extends Activity {
public final static String TAG = "MyPhone";

public final static String B_PHONE_STATE = TelephonyManager.ACTION_PHONE_STATE_CHANGED;

private MyPhoneBroadcastReceiver mBroadcastReceiver;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_phone);
}

//按钮1-注册广播
public void registerThis(View v) {
Log.i(TAG, "registerThis");
mBroadcastReceiver = new MyPhoneBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(B_PHONE_STATE);
intentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(mBroadcastReceiver, intentFilter);
}

//按钮2-撤销广播
public void unregisterThis(View v) {
Log.i(TAG, "unregisterThis");
unregisterReceiver(mBroadcastReceiver);
}

}

第5步:在AndroidManifest.xml配置权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE"/>

其中:
iTelephony.answerRingingCall();//自动接通电话
必须有权限 android.permission.MODIFY_PHONE_STATE
iTelephony.endCall();//自动挂断电话
必须有权限 android.permission.CALL_PHONE。

‘肆’ Android程序接听及挂断电话,适配所有Android版本

接听来电

拒接来电:

其中文中的接听电话android6-android7的处理方案是利用了监听通知使用权,所以还要新建一个NotificationListenerService的子类,叫ListenerService,需要在AndroidManifests中配置

另外需要提示用户打开通知使用权才可以正常使用

已测试通过了android6-android9各种机型,注意拒接来电在android9以上才有官方支持,所以需要设置compileSdkVersion=28。

需要的权限为:Manifest.permission.CALL_PHONE,Manifest.permission.READ_PHONE_STATE

8.0以上需要Manifest.permission.ANSWER_PHONE_CALLS,Manifest.permission.READ_CALL_LOG。

还不行的请注意三点:
1:检查权限是否都申请及在manifests里注册了
2:compileSdkVersion是否为28
3:android6到android7的手机的接听来电要依赖通知使用权,所以通知使用权打开才可以正常工作。

‘伍’ 安卓手机如何设置电源键挂断电话

若使用vivo手机,可以进入设置--(应用与权限)--(系统应用设置)--电话--开启“按电源键挂断来电”,不支持通话中挂断电话。
温馨提示:开启后,来电时第一次按电源键,可将来电置为静音,第二次按电源键,可将来电挂断,没有此开关则代表不支持此功能。

热点内容
sql2000服务 发布:2024-04-30 15:00:05 浏览:530
如何导出薯仔缓存视频 发布:2024-04-30 14:39:36 浏览:470
图论环的算法 发布:2024-04-30 14:39:35 浏览:641
算法课项目 发布:2024-04-30 14:23:34 浏览:245
路由器无线密码从哪里看 发布:2024-04-30 13:41:07 浏览:765
安卓由哪个公司提供 发布:2024-04-30 12:27:03 浏览:417
服务器2个cpu的内存如何安装 发布:2024-04-30 12:19:02 浏览:329
如何搭建outlook服务器 发布:2024-04-30 10:46:50 浏览:638
美图忘记密码手机如何刷机 发布:2024-04-30 10:45:43 浏览:193
sql字符设置 发布:2024-04-30 10:39:03 浏览:308