2016-09-28 1 views
0

나는이 링크에서 언급 된 코드로 시도했다. 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 : 바인더 호출을 잘못된 인터페이스

그것에 대해 어떤 생각을?

+0

오류 로그를 올바르게 추가하십시오. 코드뿐만 아니라. 아니요 우리는 코드 작성 과정을 상상하기 싫어합니다. 우리는 존 레넌이 아닙니다. –

+0

반환 된 서비스가 실제로 com.android.internal.telephony.ISms $ Stub' 클래스인지 확인하기 위해 브레이크 포인트 및 단계별 디버깅을 사용하십시오. – Robert

+0

업데이트 된 코드입니다. simID == 0 및 name = "isms"에 대해 코드가 올바르게 작동합니다. 그것은 simID == 1 및 "isms_msim"의 경우 예외를 제공합니다. Android API (문서에 따라)에서 지원되지 않는 API 레벨 19에 대해 이중 SIM 기능을 구현하려고합니다. –

답변

관련 문제