弹出电话页面

This commit is contained in:
GYJ
2024-11-27 18:18:08 +08:00
parent 938a5df35f
commit 1da1683adc
14 changed files with 252 additions and 16 deletions

View File

@@ -4,14 +4,18 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import com.czg.cashier_reserve.call.YJCoreListenerStub;
import com.czg.cashier_reserve.channel.ChannelManager;
import cn.kaer.callmodule.CoreImpl;
import cn.kaer.callmodule.CoreListener;
import cn.kaer.callmodule.KeSdk;
import io.flutter.Log;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
public class MainActivity extends FlutterActivity {
private CoreListener coreListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -21,6 +25,20 @@ public class MainActivity extends FlutterActivity {
} else {
Log.e("MainActivity", "FlutterEngine or BinaryMessenger is null, cannot setup EventChannel.");
}
coreListener = new YJCoreListenerStub();
}
@Override
protected void onResume() {
super.onResume();
CoreImpl.getCore().addListener(coreListener);
}
@Override
protected void onPause() {
super.onPause();
CoreImpl.getCore().removeListener(coreListener);
}
@Override

View File

@@ -29,11 +29,12 @@ public class CallManager {
public static void loadCallLog() {
Context mainActivityContext = ContextHolder.getInstance().getContext();
Log.i("CallManager","loadCallLog -- " + mainActivityContext);
Cursor cursor = mainActivityContext.getContentResolver().query(CallLog.Calls.CONTENT_URI,
@SuppressLint("Recycle") Cursor cursor = mainActivityContext.getContentResolver().query(CallLog.Calls.CONTENT_URI,
columns, null, null, null);
JSONArray callLogArray = new JSONArray();
assert cursor != null;
Log.i("CallManager","cursor count:" + cursor.getCount());
while (cursor.moveToNext()) {
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); //姓名
@@ -66,6 +67,5 @@ public class CallManager {
Intent broad = new Intent(EventChannelManager.Action.GET_CALL_LOG_FINISH);
broad.putExtra("callLog", callLogArray.toString());
mainActivityContext.sendBroadcast(broad);
Log.i("CallManager", "send broadcast");
}
}

View File

@@ -0,0 +1,41 @@
package com.czg.cashier_reserve.call;
import android.content.Context;
import android.content.Intent;
import com.czg.cashier_reserve.ContextHolder;
import com.czg.cashier_reserve.channel.EventChannelManager;
import com.kaer.subutil.contact.ContactBean;
import com.kaer.subutil.contact.ContactUtil;
import org.json.JSONObject;
import cn.kaer.callmodule.Call;
import cn.kaer.callmodule.CoreListenerStub;
import cn.kaer.callmodule.ctrl.BaseController;
import io.flutter.Log;
public class YJCoreListenerStub extends CoreListenerStub {
public void onCallStateChanged(BaseController var1, Call var2, Call.State var3, String var4) {
ContactBean contactInfo = ContactUtil.getContactInfo(ContextHolder.getInstance().getContext(), var2.getRemoteNumber());
Log.i("YJCoreListenerStub", "onCallStateChanged +++ " + var3);
JSONObject callInfo = new JSONObject();
try {
callInfo.put("state", var3);
callInfo.put("number", var2.getRemoteNumber());
callInfo.put("name", contactInfo.getcName());
callInfo.put("region", contactInfo.getRegion());
} catch (Exception e) {
e.printStackTrace();
}
Log.i("YJCoreListenerStub", "onCallStateChanged: " + callInfo);
Context mainActivityContext = ContextHolder.getInstance().getContext();
Intent broad = new Intent(EventChannelManager.Action.CALL_STATUS_CHANGE);
broad.putExtra("callStatus", callInfo.toString());
mainActivityContext.sendBroadcast(broad);
}
}

View File

@@ -7,6 +7,8 @@ public class ChannelNames {
public static final String CALL_LOG_CALLBACK = "callLogCallback";
public static final String CALL_STATUS_CHANGE = "callStatusChange";
public static String getChannelName(String name) {
return BASE_NAME + name;
}

View File

@@ -24,10 +24,39 @@ public class EventChannelManager {
public static Map<String, BroadcastReceiver> receiverMap = new HashMap<>();
public static List<BroadcastReceiver> broadcastReceiverList = new ArrayList<>();
private static EventChannel callLogChannel;
public static void addEventChannel(BinaryMessenger messenger) {
getCallLogCallback(messenger);
callStatusChange(messenger);
}
public static void callStatusChange(BinaryMessenger messenger) {
if (messenger == null) {
return;
}
EventChannel callStatusChannel = new EventChannel(messenger, ChannelNames.getChannelName(ChannelNames.CALL_STATUS_CHANGE));
callStatusChannel.setStreamHandler(new EventChannel.StreamHandler() {
private BroadcastReceiver broadCast;
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
broadCast = EventChannelManager.getBroadCast(eventSink);
Context context = ContextHolder.getInstance().getContext();
IntentFilter intentFilter = new IntentFilter(EventChannelManager.Action.CALL_STATUS_CHANGE);
context.registerReceiver(broadCast, intentFilter, Context.RECEIVER_NOT_EXPORTED);
receiverMap.put(EventChannelManager.Action.CALL_STATUS_CHANGE, broadCast);
}
@Override
public void onCancel(Object o) {
Context context = ContextHolder.getInstance().getContext();
context.unregisterReceiver(broadCast);
broadcastReceiverList.remove(broadCast);
broadCast = null;
}
});
}
public static void getCallLogCallback(BinaryMessenger messenger) {
@@ -35,20 +64,18 @@ public class EventChannelManager {
return;
}
Log.i("EventChannelManager", "getCallLogCallback");
callLogChannel = new EventChannel(messenger, ChannelNames.getChannelName(ChannelNames.CALL_LOG_CALLBACK));
EventChannel callLogChannel = new EventChannel(messenger, ChannelNames.getChannelName(ChannelNames.CALL_LOG_CALLBACK));
callLogChannel.setStreamHandler(new EventChannel.StreamHandler() {
private BroadcastReceiver broadCast;
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
Log.i("EventChannelManager", "onListen");
broadCast = EventChannelManager.getBroadCast(eventSink);
Context context = ContextHolder.getInstance().getContext();
IntentFilter intentFilter = new IntentFilter(EventChannelManager.Action.GET_CALL_LOG_FINISH);
context.registerReceiver(broadCast, intentFilter);
context.registerReceiver(broadCast, intentFilter, Context.RECEIVER_NOT_EXPORTED);
receiverMap.put(EventChannelManager.Action.GET_CALL_LOG_FINISH, broadCast);
}
@@ -66,12 +93,13 @@ public class EventChannelManager {
BroadcastReceiver b = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("EventChannelManager", "onReceive");
String action = intent.getAction();
Log.i("EventChannelManager", "action name == " + action);
if (Action.GET_CALL_LOG_FINISH.equals(action)) {
String extra = intent.getStringExtra("callLog");
eventSink.success(extra);
} if (Action.CALL_STATUS_CHANGE.equals(action)) {
String extra = intent.getStringExtra("callStatus");
eventSink.success(extra);
} else {
eventSink.error("没有该事件", null, null);
}
@@ -85,5 +113,6 @@ public class EventChannelManager {
// 这里假设Action是一个定义了相关常量的类示例如下你可以根据实际情况调整
public static class Action {
public static final String GET_CALL_LOG_FINISH = ChannelNames.BASE_NAME + "get_call_log_finish";
public static final String CALL_STATUS_CHANGE = ChannelNames.BASE_NAME + "call_status_change";
}
}