`

phone调用紧急电话

 
阅读更多

调用紧急电话,

解决紧急电话界面 按home键,回到锁屏界面的

 Button bt1 = (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Log.d("test", "___" + isTopActivy());
				ComponentName comp = new ComponentName("com.android.phone",
                "com.android.phone.EmergencyDialer");
					Intent intentM = new Intent();
					intentM.setComponent(comp);
					startActivity(intentM);

				Intent intent = new Intent();
				intent.setClass(PhoneDemoActivity.this, PhoneService.class);
				intent.setAction(PhoneService.LOCK);
				startService(intent);
			}
		});
        Button bt2 = (Button) findViewById(R.id.bt2);
        bt2.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(PhoneDemoActivity.this, PhoneService.class);
				intent.setAction(PhoneService.CANCEL_LOCK);
				startService(intent);
			}
		});

 问题。

 

得到栈顶的activity :使用SingleTask加载模式:

 public String isTopActivy(){
        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
        String cmpNameTemp = null;

        if(null != runningTaskInfos){
                cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString();
                Log.e("cmpname","cmpname:"+cmpNameTemp);
        }

       return cmpNameTemp;
}

 

service每隔500毫秒启动服务检测:

 

public static final String LOCK = "SET_LOCK" ;
	public static final String CANCEL_LOCK = "CANCEL_LOCK" ;
	
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	@Override
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		if(intent != null){
			String action = intent.getAction();
			Log.d("test", "action_" + action);
			if(action.equals(LOCK)){
				setAlarm();
				String phoneEm = isTopActivy();
				String pStr = "ComponentInfo{com.android.phone/com.android.phone.EmergencyDialer}" ;
				String lStr = "ComponentInfo{com.phone/com.phone.PhoneDemoActivity}" ;
				String launch2 = "ComponentInfo{com.android.launcher/com.android.launcher2.Launcher}" ;
//				if(phoneEm.equals(launch2)){
				if(phoneEm.equals(pStr) || phoneEm.equals(lStr)){
				
				}else {
					Intent intent2 = new Intent();
					intent2.setClass(this, PhoneDemoActivity.class);
					intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
					startActivity(intent2);
					
				}
				Log.d("test", "!phoneEm.equals(phoneEm)_" + !phoneEm.equals(phoneEm));
				Log.d("test", "!phoneEm.equals(lStr)_" + !phoneEm.equals(lStr));
				Log.d("test", "phoneEm_" + phoneEm);
			}else if(action.equals(CANCEL_LOCK)){
				cancelAlarm();
			}
		}
	}
	private int i = 0;
	private int j = 0;
	
	private void setAlarm(){
		Log.d("test", "setAlarm_" + i++);
		Intent i = new Intent();
		i.setClass(this, PhoneService.class);
		i.setAction(LOCK);
		PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
		AlarmManager alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE);
		alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 500,500, pi);
	}
	
	private void cancelAlarm(){
		Log.d("test", "cancelAlarm_" + j++);
		Intent i = new Intent();
		i.setClass(this, PhoneService.class);
		i.setAction(LOCK);
		PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
		AlarmManager alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE);
		alarmMgr.cancel(pi);
	}
	
	/***/
	public String isTopActivy(){
	        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
	        List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
	        String cmpNameTemp = null;

	        if(null != runningTaskInfos){
	                cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString();
//	                Log.e("cmpname","cmpname:"+cmpNameTemp);
	        }

	       return cmpNameTemp;
	}

 

 

 

 

分享到:
评论

相关推荐

    Android_Phone源代码来电流程解读

    其中,当收到`PHONE_NEW_RINGING_CONNECTION`类型的`Message`时,会调用`onNewRingingConnection()`方法,该方法进一步调用`startIncomingCallQuery()`,用于查询用户设定的铃声信息,如系统预设铃声或自定义铃声。...

    Android Phone模块总结(附有Contacts模块)

    在Android操作系统中,Phone模块是核心组件之一,负责处理电话相关的功能,包括拨打电话、接听电话、管理联系人等。Contacts模块则是用户与联系人数据交互的主要界面,它允许用户查看、编辑和呼叫联系人。本文将对这...

    深入解析Android phone模块

    在此过程中,获取传入的电话号码并根据`PhoneApp`实例确定电话类型等信息,最后更新并启动接听屏幕。 6. **C/C++部分**: - **初始化事件循环**:通过调用`RIL_startEventLoop`来启动事件循环线程。 - **启动串口...

    android > AIDL 以及挂断电话

    总结来说,AIDL是Android进程间通信的关键技术,它使得服务端可以提供跨进程调用的接口,而“EndCall”和“AIDLService”则是具体应用场景的实例,分别展示了如何使用AIDL创建服务以及如何实现挂断电话的功能。...

    Andriod Phone模块

    在`OutgoingCallBroadcaster`的`onCreate()`中,会检查接收到的ACTION和电话号码,对号码进行处理(例如,转换字母到数字,移除分隔符),并判断是否为紧急号码。 如果满足拨打电话的条件,将会启动InCallScreen...

    系统拨打电话功能很实用的哦

    在实际应用中,系统拨打电话功能常用于紧急呼叫、客服热线、好友联系等场景,极大地方便了用户的生活和工作。 总的来说,系统拨打电话功能虽然看似简单,但在实际开发中需要考虑的因素却很多,包括但不限于权限管理...

    android 实现拨打电话黑屏功能

    在Android平台上实现拨打电话并同时让屏幕保持黑屏或关屏的功能,对于一些特定的应用场景,比如紧急呼叫或者隐私保护,具有一定的实用价值。本文将详细介绍如何实现这一功能,并提供相应的源码分析。 首先,我们...

    swift-libphonenumber(Google的电话号码处理库)库的iOS移植

    - **短号转换**:将短号(如紧急服务号码)转换为完整的国际电话号码。 - **区号提取**:从电话号码中提取国家/地区代码和区号等信息。 4. **使用步骤** - **集成**:将`libPhoneNumber-iOS-master`项目导入到...

    电话支持库

    在实际项目中,电话支持库可以用于构建各种电话和短信相关的应用,如电话会议应用、紧急呼叫系统、智能语音助手,甚至是可以自动应答和处理短信的机器人系统。由于其易用性和强大的功能,这个库对于E语言的开发者来...

    Android项目实战--手机卫士05--自定义对话框与拨打电话来启动activity

    结合以上两点,我们可以实现一个功能完善的手机卫士应用,其中自定义对话框用于提示用户或获取输入,而拨打电话功能则用于快速连接到紧急服务或其他支持热线。在实际项目中,还需要考虑错误处理、UI优化以及不同设备...

    深入理解android telephony原理剖析与最佳实践

    - `ITelephony`:这是一个远程过程调用接口,应用程序通过该接口可以进行拨打电话、挂断电话等操作。 - `Phone`:这个类代表了一个物理电话设备,提供了接听、挂断电话等方法。 2. **数据传输层**:Telephony还...

    SendTextingAndMakeAPhoneCall

    另外,iOS对直接调用拨打电话和发送短信有严格的限制,防止滥用,因此在使用这些功能时需谨慎,遵循Apple的App Store审核指南。 总结来说,“SendTextingAndMakeAPhoneCall”这个项目旨在展示如何利用iOS SDK中的`...

    微信小程序实现的一键拨号功能示例

    这个函数会调用wx.makePhoneCall方法,方法中需要传入一个对象参数,其中包括要拨打的电话号码(phoneNumber)属性。在wx.makePhoneCall方法执行后,会分别根据拨号成功或失败给出提示。具体的函数实现如下: ```...

    android 自动拨号源码

    总结,Android 自动拨号源码主要涉及拨号器接口调用、电话管理器服务交互、后台服务与 Handler 的使用,以及用户界面的实时反馈。理解这些核心知识点,开发者就能构建自己的自动拨号应用,满足各种场景的需求。在...

    android_voice.rar

    请注意,自Android 6.0(API级别23)起,拨打电话需要在运行时请求`CALL_PHONE`权限。 **发送短信** 发送短信同样依赖于`Intent`,但涉及到的是`SmsManager`类。以下是基本步骤: 1. 获取`SmsManager`的实例,它...

    Android中打电话的数据流程分析

    这一步骤是为了确保紧急电话的优先处理和合规性。然后,Intent的ACTION被更新,并且Intent被传递给`InCallScreen`类,启动这个Activity。 `InCallScreen.java`位于`/packages/Phone/src/com/android/phone`目录下,...

    Twiliio-Phone-Dilaer

    【标题】"Twilio-Phone-Dialer"项目是一个基于Twilio API开发的电话自动拨号器。这个项目的核心功能是利用Twilio的服务来实现自动拨打预设的电话号码,通常用于业务呼叫中心、客户服务或者自动化通知场景。 【描述...

    Android打电话流程[归类].pdf

    - **PhoneApp**: 这是Android通话服务的核心,它负责管理和控制所有与通话相关的功能,包括连接、挂断、切换和处理来电等。 - **通话状态**: IDLE表示无通话行为,RINGING表示有来电或呼叫等待,OFFHOOK表示至少...

Global site tag (gtag.js) - Google Analytics