【发布时间】:2018-06-23 09:36:27
【问题描述】:
我需要一种方法来获取来电者的电话号码和通话结束后的通话日期/时间,然后开始活动并传递数据。
我知道这可以使用广播接收器和意图来完成,但我该怎么做呢?
【问题讨论】:
标签: android android-intent broadcastreceiver phone-state-listener
我需要一种方法来获取来电者的电话号码和通话结束后的通话日期/时间,然后开始活动并传递数据。
我知道这可以使用广播接收器和意图来完成,但我该怎么做呢?
【问题讨论】:
标签: android android-intent broadcastreceiver phone-state-listener
您可以使用无障碍服务来做到这一点
public class CallDetection extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
Log.i("myaccess", "in window changed");
AccessibilityNodeInfo info = event.getSource();
if (info != null && info.getText() != null) {
String duration = info.getText().toString();
String zeroSeconds = String.format("%02d:%02d", new Object[]{Integer.valueOf(0), Integer.valueOf(0)});
String firstSecond = String.format("%02d:%02d", new Object[]{Integer.valueOf(0), Integer.valueOf(1)});
Log.d("myaccess", "after calculation - " + zeroSeconds + " --- " + firstSecond + " --- " + duration);
if (zeroSeconds.equals(duration) || firstSecond.equals(duration)) {
Toast.makeText(getApplicationContext(), "Call answered", Toast.LENGTH_SHORT).show();
// Your Code goes here
}
info.recycle();
}
}
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Toast.makeText(this, "Service connected", Toast.LENGTH_SHORT).show();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
info.notificationTimeout = 0;
info.packageNames = null;
setServiceInfo(info);
}
@Override
public void onInterrupt() {
}
}
【讨论】: