弹出电话页面
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user