我想接收来自我的应用程序的来电
,我正在使用itelephony.aidl
来结束和接收来电
。我写了下面的代码来回答按下的呼叫按钮,大多数情况下我能够结束所有设备上的呼叫,但当我试图接收一个呼叫时,它不工作。
此(呼叫应答)代码在我测试过的一些设备上运行良好(Motorola**e3 6.0Android安全补丁2016年6月1日、honor 4.4.4、YU 4.4.4等)它在
(小米note 4 6.0.1,lyf 6.O.1Android安全补丁2017年3月1日)上运行不正常`可能是由于最新版本的Android安全补丁更新造成的。
我认为谷歌已经允许一些权限
只对系统应用程序
出于安全
的原因,在Android安全补丁的最新更新中,从2016年6月1日到2017年3月1日。
请帮忙,谢谢。
private void m13352k() {
try {
TelephonyManager telephonyManager = (TelephonyManager)
getSystemService("phone");
Method declaredMethod =
Class.forName(telephonyManager.getClass().getName()).
getDeclaredMethod("getITelephony", new Class[0]);
declaredMethod.setAccessible(true);
ITelephony iTelephony = (ITelephony)
declaredMethod.invoke(telephonyManager, new Object[0]);
iTelephony.silenceRinger();
iTelephony.answerRingingCall();
} catch (Exception e) {
try {
m13350j();
} catch (Exception e2) {
m13349i();
}
}
}
private void m13349i() {
try {
Intent intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(0, 79));
sendOrderedBroadcast(intent, callerIdConfig.callPrivileged());
intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(1, 79));
sendOrderedBroadcast(intent, callerIdConfig.intentCallPrivileged());
intent = new Intent(callerIdConfig.headsetPlug());
intent.addFlags(1073741824);
intent.putExtra("state", callerIdConfig.m13633f());
intent.putExtra("name", callerIdConfig.headset());
sendOrderedBroadcast(intent, null);
} catch (Exception e) {
e.printStackTrace();
}}
private void m13350j() {
Intent intent = new Intent("android.intent.action.HEADSET_PLUG");
intent.addFlags(1073741824);
intent.putExtra("state", callerIdConfig.m13633f());//0
intent.putExtra("name", callerIdConfig.headset());
sendOrderedBroadcast(intent, null);
intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(0, 79));
sendOrderedBroadcast(intent, callerIdConfig.intentCallPrivileged());
intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(1, 79));
sendOrderedBroadcast(intent, callerIdConfig.intentCallPrivileged());
intent = new Intent("android.intent.action.HEADSET_PLUG");
intent.addFlags(1073741824);
intent.putExtra("state", callerIdConfig.m13629e());//1
intent.putExtra("name", callerIdConfig.headset());//"Headset"
sendOrderedBroadcast(intent, null);
}
当我点击接收来自我的应用程序的电话时,我得到了下面的日志,请提供解决方案
W/System.err:at android.app.activitymanagerproxy.broadcastint(activitymanagernative.java:3218)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.dialer w/system.err:at android.app.contextimpl.sendorderedbroadcast(contextwrapper.java:426)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.34.161 245 65-24565/smartcall.talktime.balance.phone.dialer w/system.err:at smartcall.talktime.balance.phone.dialer.callRecorder.activity.fullscreencalleractivity.m13349i(fullscreencalleractivity.java:253)06-27 12:33:34.161 245 65-)06-27 12:33:34.161 245 65-24565/SmartCall.talktime.balance.phone.dialer.callRecorder.activity.fullscreencalleractivity.access$200(fullscreencalleractivity.java:35)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.dialer w/system.err:at smartcall.talktime.palance.phone.dialer活动$2.运行(fullscreencalleractivity.java:212)06-27 12:33:34.161 245 65-15)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.dialer W/system.err:at android.os.handler.dispatchmessage(handler.java:104)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.dialer W/system.err:at android.os.looper.loop(looper.java:207)06-27 12:33:34.161 245 65-24565/smartcall.talktime..java:5767)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.dialer W/system.err:at java.lang.reflect.Method.invoke(原生方法)06-27 12:33:34.16124565-24565/smartcall.talktime.balance.phone.dialer W/system.err:at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:789)06-27 12:33:34.161 245 65-24565/smartcall.talktime.balance.phone.dialer W/system.err:at com.android.internal.os.zygoteinit.java:679)
=========================================================================================
我发现此解决方案在状态栏中显示呼叫通知的一些设备上运行良好,此解决方案支持2017年3月1日Android安全补丁更新后(此解决方案可能不适用于三星和oppo或其他设备)仍在寻找完美的解决方案,如果有人发现请更新,谢谢
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import java.util.Arrays;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class NotificationService extends NotificationListenerService {
public static PendingIntent pendingIntent;
//start service on call notification get
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Log.e("onNotificationSag", "titleaction"+ Arrays.toString(sbn.getNotification().actions));
if (sbn.getNotification().actions != null) {
for (Notification.Action action : sbn.getNotification().actions) {
Log.e("onNotificationSag", "action" + action.title);
if (action.title.toString().equalsIgnoreCase("Answer")) {
pendingIntent = action.actionIntent;
// try {
//receive call automatically
pendingIntent.send();
//} catch (PendingIntent.CanceledException e) {
// e.printStackTrace();
//}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
}
}
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.service.notification.NotificationListenerService" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<service
android:name=".NotificationService "
android:label="@string/app_name"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action
android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
本文向大家介绍Mapper 接口的工作原理是什么?Mapper 接口里的方法,参数不同时,方法能重载吗?相关面试题,主要包含被问及Mapper 接口的工作原理是什么?Mapper 接口里的方法,参数不同时,方法能重载吗?时的应答技巧和注意事项,需要的朋友参考一下 Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper
SVG_Essentials SVG & XML SVG中的一些DOM接口 在使用脚本操作SVG时,有时候希望能计算一些没有被直接定义的几何属性。比如不管文字怎么变化,都能画一个更好匹配文字区域的矩形。 1. SVG Element(SVG命名空间中的任何元素) 方法或属性 说明 .ownerSVGElement() 返回最近的祖先SVG元素,如果是在顶级SVG调用,则返回null .viewpo
B类: 如何影响这个界面?
最近我正在学习Java8个特性,所以我从lambda表达式开始,然后我遇到了Java流API,现在我正在尝试围绕流API中的方法,它们是如何工作的? 我对lambda表达式的理解是,如果我们想将lambda表达式传递给该方法,那么我们需要使用单个未实现的方法(Java 8接口可以有默认实现)创建一个与lambda表达式的签名匹配的接口。然后,传递lambda表达式的方法可以通过调用接口方法来执行l
我在读有效的Java课本。第一项是关于使用静态工厂方法而不是公共构造函数。我的疑问是,如果我正在指定我如何在中指定静态工厂方法?因为Java不支持内部的静态方法。教材指定了如何创建包含公共静态工厂方法的不可实例化类。但是这些方法如何访问实现类的私有构造函数呢? 教材中说,如果要定义,请创建一个不可实例化的类,并在该类中包含静态工厂方法。但是类中定义的方法如何访问具体实现的私有构造函数 编辑:-以下
请帮助我了解什么是好的设计在这里,详细。