2014-01-14 2 views
1

나는 cordova와 html (js/css 등 ..)을 사용하여 안드로이드 응용 프로그램을 만들고 있어요 사용자가를 클릭하면 SMS 응용 프로그램을 열려고합니다. 링크. tel:mailto: 계획이 sms: 또는 smsto: 작동하지 않는, 작동하는 동안href sms : || smsto : 안드로이드에서 작동하지 않는 html + cordova (phonegap)

<a href="sms:052xxxx808">Send Sms</a> 

:

는 HTML 코드입니다.

정보 : 난 ERR_UNKNOWN_URL_SCHEME

D/Cordova(27207): CordovaWebViewClient.onReceivedError: Error code=-10 Description=net::ERR_UNKNOWN_URL_SCHEME URL=smsto:052xxxx808 

:이 오류가 No Activity found to handle Intent

E/Cordova(28360): Error sending sms sms:052xxxx808:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) } 

그리고 sms: 방식을 사용 :

내가이 오류를 얻을 sms: 방식을 사용 앱을 테스트하려면 Kitkat 4.4.2와 함께 Nexus 5 사용 ..

추신 : sms: 체계가 작동 갤럭시 4 ... (하지 킷캣)

업데이트 : sms: 계획이하는 작업과 브라우저에서 HREF 링크

을 클릭하면, 어쩌면 내가 허락이나 뭐 그런 걸 잃어 버렸을까요?

+0

내가 당신의 보고서를 발견했을 때 나는 똑같은 것을 보았고 똑같은 것을 올리려했다. href 대신 Cordova SMS 플러그인을 사용해 보셨습니까? 나는 그 길로 내려 가기 시작했다. – occasl

답변

0

두 개의 이전 답변 herehere을 결합한 SMS 플러그인을 만들어이 기능을 사용할 수있었습니다. 유일한 단서는 이전 버전과 다른 방식으로 빌드 버전이 KitKat인지 확인하려는 의도를 확인해야한다는 것입니다.

가 여기 내 플러그인 코드입니다 :

public class SmsPlugin extends CordovaPlugin { 
    public final String ACTION_SEND_SMS = "SendSMS"; 

    @Override 
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { 
     if (action.equals(ACTION_SEND_SMS)) { 
      try { 
       String phoneNumber = args.getString(0); 
       String message = args.getString(1); 
       String method = args.getString(2); 

       if (method.equalsIgnoreCase("INTENT")) { 
        invokeSMSIntent(phoneNumber, message); 
        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.NO_RESULT)); 
       } else { 
        sendSMS(phoneNumber, message); 
       } 

       callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK)); 
       return true; 
      } catch (JSONException ex) { 
       callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION)); 
      } 
     } 
     return false; 
    } 

    private void invokeSMSIntent(String phoneNumber, String message) { 
     Intent intent; 
     Activity activity = this.cordova.getActivity(); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // Android 4.4 and up 
     { 
      String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity); 

      intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + Uri.encode(phoneNumber))); 
      intent.putExtra("sms_body", message); 

      // Can be null in case that there is no default, then the user would be able to choose any app that supports this intent. 
      if (defaultSmsPackageName != null) { 
       intent.setPackage(defaultSmsPackageName); 
      } 
     } else { 
      intent = new Intent(Intent.ACTION_VIEW); 
      intent.setType("vnd.android-dir/mms-sms"); 
      intent.putExtra("address", phoneNumber); 
      intent.putExtra("sms_body", message); 
     } 

     activity.startActivity(intent); 
    } 

    private void sendSMS(String phoneNumber, String message) { 
     SmsManager manager = SmsManager.getDefault(); 
     PendingIntent sentIntent = PendingIntent.getActivity(this.cordova.getActivity(), 0, new Intent(), 0); 
     manager.sendTextMessage(phoneNumber, null, message, sentIntent, null); 
    } 
} 

그리고 여기 자바 스크립트에서 호출하는 방법입니다

var sms = function() { 
    message: function (phnum, callback) { 
     if (Ext.os.is.iOS) { 
      cordova.exec(callback, function (err) { 
       callback('The following error occurred: ' + err); 
      }, "Sms", "send", [ {"recipients": [phnum]} ]); 
     } else if (Ext.os.is.Android) { 
      cordova.exec(callback, function (err) { 
       callback('The following error occurred: ' + err); 
      }, "SmsPlugin", "SendSMS", [phnum, "", "INTENT"]); 
     } else { 
      document.location.href = "sms:" + phnum 
     } 
    } 
}; 
module.exports = sms; 

당신이를 추가해야합니다은 config.xml 파일 :

<feature name="SmsPlugin"> 
    <param name="android-package" value="my.plugin.SmsPlugin" /> 
</feature> 
관련 문제