나는이 링크에서 언급 된 코드로 시도했다. How to send a SMS using SMSmanager in Dual SIM mobile? 나는 simID가 "isms_msim"인 이름을 사용했다.듀얼 SIM 모바일 모토 E (안드로이드 버전 4.4.4)에서 자바 리플렉션을 사용하여 SMS를 보내는 방법은 무엇입니까?
try {
if (simID == 0) {
name = "isms";
} else if (simID == 1) {
name = "isms_msim";
} else {
throw new Exception("can not get service which for sim '" + simID + "', only 0,1 accepted as values");
}
Method method = Class.forName("android.os.ServiceManager").getDeclaredMethod("getService", String.class);
method.setAccessible(true);
Object param = method.invoke(null, name);
method = Class.forName("com.android.internal.telephony.ISms$Stub").getDeclaredMethod("asInterface", IBinder.class);
method.setAccessible(true);
Object stubObj = method.invoke(null, param);
if (Build.VERSION.SDK_INT < 18) {
method = stubObj.getClass().getMethod("sendMultipartText", String.class, String.class, List.class, List.class, List.class);
method.invoke(stubObj, toNum, centerNum, smsTextlist, sentIntentList, deliveryIntentList);
} else {
method = stubObj.getClass().getMethod("sendMultipartText", String.class, String.class, String.class, List.class, List.class, List.class);
===> method.invoke(stubObj, ctx.getPackageName(), toNum, centerNum, smsTextlist, sentIntentList, deliveryIntentList);
}
return true;
} catch (ClassNotFoundException e) {
Logger.Log(TAG, Logger.LogLevel.ERROR, "Error while sending multiple sms, stack trace: " + e.getStackTrace());
} catch (NoSuchMethodException e) {
Logger.Log(TAG, Logger.LogLevel.ERROR, "Error while sending multiple sms, stack trace: " + e.getStackTrace());
} catch (InvocationTargetException e) {
Logger.Log(TAG, Logger.LogLevel.ERROR, "Error while sending multiple sms, stack trace: " + e.getStackTrace());
} catch (IllegalAccessException e) {
Logger.Log(TAG, Logger.LogLevel.ERROR, "Error while sending multiple sms, stack trace: " + e.getStackTrace());
} catch (Exception e) {
Logger.Log(TAG, Logger.LogLevel.ERROR, "Error while sending multiple sms, stack trace: " + e.getStackTrace());
}
하지만이 코드 라인에 예외 다음주고 다른 블록 ===>로 시작 에 SecurityException : 바인더 호출을 잘못된 인터페이스
그것에 대해 어떤 생각을?
오류 로그를 올바르게 추가하십시오. 코드뿐만 아니라. 아니요 우리는 코드 작성 과정을 상상하기 싫어합니다. 우리는 존 레넌이 아닙니다. –
반환 된 서비스가 실제로 com.android.internal.telephony.ISms $ Stub' 클래스인지 확인하기 위해 브레이크 포인트 및 단계별 디버깅을 사용하십시오. – Robert
업데이트 된 코드입니다. simID == 0 및 name = "isms"에 대해 코드가 올바르게 작동합니다. 그것은 simID == 1 및 "isms_msim"의 경우 예외를 제공합니다. Android API (문서에 따라)에서 지원되지 않는 API 레벨 19에 대해 이중 SIM 기능을 구현하려고합니다. –