导航:首页 > 操作系统 > androiditelephony

androiditelephony

发布时间:2023-07-07 22:02:04

android怎么判断是双卡双待

Android怎么判断是双卡双待的具体方法为:

1、Android平台是一个多样型的平台,不同的手机获取ITelephony接口不同,用一种方法实现双卡双待管理是不可取的。只有针对不同的手机分析出一套管理的方案,该方案实现难度大,因为需要各个厂家的SDK的资料。为了实现该功能,需要整合各个厂家的SDK的资料。

2、为了更好的管理双卡双待的问题,新建一个双卡双待模块静态库,其它项目引用便是,项目如图:

3、AbsSim是抽象类,负责实现手机操作的类。不同的厂家继承该类实现各自的接口。AbsSim信息如下:

public abstract class AbsSim implements IDualDetector { //抽象基类

protected final String TAG = getClass().getSimpleName();

protected ArrayList<SimSlot> mSimSlots = new ArrayList<SimSlot>();

protected boolean mIsDualSimPhone = false;

protected String mCallLogExtraField = "";


public abstract String getSimPhoneNumber(int paramInt); // 返回手机号码


public abstract int getDataState(int paramInt);// 返回数据状态


public abstract String getIMSI(int paramInt);// 返回手机标识


public abstract String getIMSI(int paramInt, Context paramContext);// 返回手机标识


public abstract int getPhoneState(int paramInt);// 返回手机状态


public abstract boolean isServiceAvaliable(int paramInt);// 服务是否可用


public abstract boolean isSimStateIsReady(int paramInt);// 卡是否在使用


public abstract int getSimOperator(int paramInt);// 服务商(电信、移动、联通)


protected abstract Object getITelephonyMSim(int paramInt);// 获取操作接口


protected abstract Object getMSimTelephonyManager(int paramInt);// 获取操作接口


}

4、这是利用java 反射机制操作Android隐藏的类,很好的解决了双卡双待的问题。

❷ android开发 itelephony有什么方法

android4.0之后应用程序无法再获得Home键消息,这样是对滴,但如果想自己写Launcher就得对Home键相关的一些消息进行处理了。Home消息是在androidframwork中处理的,我们找到Home键处理相关的代码(不想细看的可以直接看最后)frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java中的PhoneWindowManager.函数中有以下内容//,soapplications//canneverbreakit,althoughifkeyguardison,wedolet//ithandleit,//timeout.if(keyCode==KeyEvent.KEYCODE_HOME){//Ifwehavereleasedthehomekey,anddidn'tdoanythingelse//whileitwaspressed,thenitistimetogohome!if(mHomePressed&&!down){mHomePressed=false;if(!canceled){//Ifanincomingcallisringing,HOMEistotallydisabled.//(,//.)booleanincomingRinging=false;try{ITelephonytelephonyService=getTelephonyService();if(telephonyService!=null){incomingRinging=telephonyService.isRinging();//是否正好有电话打进来}}catch(RemoteExceptionex){Log.w(TAG,"()",ex);}if(incomingRinging){Log.i(TAG,"IgnoringHOME;there'saringingincomingcall.");//来电中的时候可以看到打印个消息就完了}else{launchHomeFromHotKey();//可以看到这里有launchHome,应该是这里通知了Launcher程序,继续往下看}}else{Log.i(TAG,"IgnoringHOME;eventcanceled.");}return-1;}//Ifasystemwindowhasfocus,thenitdoesn'tmakesense//.//这一段没有看的很明白,不过很明显没有对Home键处理,只是判断了一些情况然后返回了WindowManager.LayoutParamsattrs=win!=null?win.getAttrs():null;if(attrs!=null){finalinttype=attrs.type;if(type==WindowManager.LayoutParams.TYPE_KEYGUARD||type==WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG){//the"app"iskeyguard,sogiveitthekeyreturn0;}finalinttypeCount=WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;for(inti=0;ilaunchhomeactionwasdetected.Taketheappropriateaction*.*/voidlaunchHomeFromHotKey(){if(mKeyguardMediator.isShowingAndNotHidden()){//don'tlaunchhomeifkeyguardshowing//这个keyguard不知道是什么东东,反正它启动了就不响应Home键,系统已经处理了,跟Launcher没关系}elseif(!mHideLockScreen&&mKeyguardMediator.isInputRestricted()){//wheninkeyguardrestrictedmode,mustfirstverifyunlock//.verifyUnlock(newOnKeyguardExitResult(){(booleansuccess){if(success){try{ActivityManagerNative.getDefault().stopAppSwitches();//关闭这个东东}catch(RemoteExceptione){}sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);//关闭这个东东startDockOrHome();//启动Dock或者Home很明显这三个函数都很重要一个一个去看看}}});}else{//nokeyguardstufftoworryabout,justlaunchhome!//这里跟上面是一样处理的try{ActivityManagerNative.getDefault().stopAppSwitches();}catch(RemoteExceptione){}sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);startDockOrHome();}}进入sendCloseSystemWindows,startDockOrHome两个函数看看voidsendCloseSystemWindows(){sendCloseSystemWindows(mContext,null);}voidsendCloseSystemWindows(Stringreason){sendCloseSystemWindows(mContext,reason);}(Contextcontext,Stringreason){if(ActivityManagerNative.isSystemReady()){try{ActivityManagerNative.getDefault().closeSystemDialogs(reason);//又是调用这个了}catch(RemoteExceptione){}}}voidstartDockOrHome(){Intentdock=createHomeDockIntent();if(dock!=null){try{mContext.startActivity(dock);//启动HomeDock这个Dock好像是自定义的主界面,这里就不管了return;}catch(ActivityNotFoundExceptione){}}mContext.startActivity(mHomeIntent);//启动HomeIntent(其实就是发一个Intent消息到主界面)}我们再看看mHomeIntent是怎么定义的IntentmHomeIntent;mHomeIntent=newIntent(Intent.ACTION_MAIN,null);mHomeIntent.addCategory(Intent.CATEGORY_HOME);mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);Launcher中接受Intent的地方在Launcher2\Launcher2\src\com\android\launcher2\launcher.javaprotectedvoidonNewIntent(Intentintent){}函数中这里就不分析了,先试试能不能接受到再说。nnd搞了半天Launcher根本没接受Home键,按Home键时farmwork直接给Launcher调到最前面来了。

❸ android 怎么判断电话占线

1. 如何判断手机是否处于正在通话中?(任何时候都可以判断手机是否处于通过中)
private boolean phoneIsInUse() {
boolean phoneInUse = false;
try {
ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
if (phone != null) phoneInUse = !phone.isIdle();
} catch (RemoteException e) {
Log.w(TAG, "phone.isIdle() failed", e);
}
return phoneInUse;
}

2.通话状态的判断(需要注册监听以后,才可以判断手机通话状态的改变,可能连续接收到同一个状态的改变)

package cn.com.chenzheng_java;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.TextView;
/**
*
* @author
* @description 通过该实例,我们可以看到,如果我们想要监听电话的拨打状况,需要这么几步
* 第一:获取电话服务管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
* 第二:通过TelephonyManager注册我们要监听的电话状态改变事件。manager.listen(new MyPhoneStateListener(),
* PhoneStateListener.LISTEN_CALL_STATE);这里的PhoneStateListener.LISTEN_CALL_STATE就是我们想要
* 监听的状态改变事件,初次之外,还有很多其他事件哦。
* 第三步:通过extends PhoneStateListener来定制自己的规则。将其对象传递给第二步作为参数
* 第四步:这一步很重要,那就是给应用添加权限。android.permission.READ_PHONE_STATE
*
*
*/
public class PhoneCallStateActivity extends Activity {
TelephonyManager manager ;
String result = "监听电话状态:/n";
TextView textView ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取电话服务
manager = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
// 手动注册对PhoneStateListener中的listen_call_state状态进行监听
manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);

textView = (TextView) findViewById(R.id.textView1);
textView.setText(result);
}
/***
* 继承PhoneStateListener类,我们可以重新其内部的各种监听方法
*然后通过手机状态改变时,系统自动触发这些方法来实现我们想要的功能
*/
class MyPhoneStateListener extends PhoneStateListener{

@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
result+=" 手机空闲起来了 ";
break;
case TelephonyManager.CALL_STATE_RINGING:
result+=" 手机铃声响了,来电号码:"+incomingNumber;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
result+=" 电话被挂起了 ";
default:
break;
}
textView.setText(result);
super.onCallStateChanged(state, incomingNumber);
}

}

}
这里一定要注意,别忘记给应用注册权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"$amp;>amp;$lt;/uses-permission>

❹ ITelephony.aidl 在android studio中的使用

aidl文件的包名必须和aidl目录下java的包名一致。

先看下你的ITelephony.aidl文件的包名是不是com.android.internal.telephony;


aidl文件放在aidl目录下, 和java目录同级


最后要手动的build ---- make这个mole 成功后, 才会生成Java文件,生成的文件位于build/generated/source/aidl那边, 你的工程目录里是看不到的, 不过可以使用了。

❺ 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;

阅读全文

与androiditelephony相关的资料

热点内容
程序员测试轻松吗 浏览:164
英雄联盟神魔怎么绑定服务器 浏览:980
音乐app怎么换音质 浏览:974
python进阶客户流失 浏览:280
华为荣耀10服务器地址 浏览:998
javastring相等判断 浏览:411
程序员考研究生学校 浏览:935
java卡顿 浏览:500
编程软件怎么运行zip文件 浏览:505
单片机怎么做组态 浏览:899
android参考文献外文 浏览:684
铜电极电流效率的算法 浏览:142
短信内存已满怎么处理安卓 浏览:312
ogg命令 浏览:784
南昌程序员最新消息 浏览:151
蓝牙编程入门书籍 浏览:763
单片机秒表实验 浏览:411
小米3文件夹设置 浏览:566
手动添加dns服务器加什么数字 浏览:563
单片机中三位数码管原件 浏览:142