2016-09-28 6 views
0

私はこのリンクに記載されているコードを試しましたHow to send a SMS using SMSmanager in Dual SIM mobile? 私はsimIDの名前は "isms_msim"です。デュアルSIMモバイルMoto E(アンドロイドバージョン4.4.4)でJavaリフレクションを使用して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"の場合は例外を出しています。私はアンドロイド(ドキュメントに付属)でサポートされていないAPIレベル19のDual SIM feautureを実装したいと思います。 –

答えて

関連する問題