Как установить плагин в Phonegap

Я новичок в телефонном разрыве и работаю над одним приложением, которое работает на Android и IOS. Теперь мое требование состоит в том, что я хочу отправить электронное письмо с вложением, поэтому я ищу в Интернете и нашел этот плагин, Плагин EmailComposer-phonegap. там пишут 4 пункт как ниже.

  1. Добавьте файлы EmailComposer.h EmailComposer.m в папку плагинов.
  2. Поместите файл EmailComposer.js куда-нибудь в свою папку www и включите его из HTML-кода.
  3. Добавьте в config.xml раздел plugins: или, если используется новый формат,

    <feature name="EmailComposer"> <param name="ios-package" value="EmailComposer" /> </feature>
    
  4. На Android в атрибуте value обязательно укажите имя пакета, например

    value="org.apache.cordova.EmailComposer"
    

Теперь мой вопрос, как использовать этот плагин? Я выполнил 2-й пункт, но не знаю, куда разместить файлы в качестве пункта 1? потому что я не знаю, где моя папка «Плагин». а как работать с пунктом 3 и 4 ?

Я также нахожу этот код через Интернет. но оповещение "Прикрепить файл" не работает.

var smallImage = document.getElementById('smallImage').value
alert("Send Mail");
window.plugins.emailComposer.showEmailComposer(
        "Send Images",
        smallImage,
        ["[email protected]",],
        [],
        [],
        true,
        ["image.jpeg", "file.zip"],
        alert("Attach file");
    );
    alert("Send Mail Success");

Итак, что мне нужно сделать для успешной отправки вложенного письма?


person Shivam Pandya    schedule 15.11.2013    source источник
comment
Установил плагин cord-ova...   -  person vinay Maneti    schedule 15.11.2013
comment
@ManetiVinay Я добавляю jar-файл Cordova и добавляю его в путь сборки, а также добавляю его js-файл.   -  person Shivam Pandya    schedule 15.11.2013
comment
вы хотите, где разместить плагин в android и ios..   -  person vinay Maneti    schedule 15.11.2013
comment
@ManetiVinay Да. в какой папке проекта?   -  person Shivam Pandya    schedule 15.11.2013


Ответы (1)


Попробуйте это. Это работает для меня ...

index.html

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <meta name="format-detection" content="telephone=no" />
            <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />

            <title>Hello World</title>
        </head>
        <body>

            <script type="text/javascript" src="phonegap.js"></script>
            <script type="text/javascript" src="js/EmailComposer.js"></script>  

             <script type="text/javascript">            
             document.addEventListener("deviceready",onDeviceReady,false);
                function onDeviceReady() {


                            cordova.require('cordova/plugin/emailcomposer').showEmailComposer(
                                function() { console.log( 'successfully called email composer' ); },
                                function() { console.log( 'failed to call email composer' ); },
                                "Look at this photo",
                                "Take a look at this:",
                                 ["[email protected]"],
                                 [],
                                 [],
                                false,
                                ["/mnt/sdcard/amit/amit.png","/mnt/sdcard/amit/amit.png","/mnt/sdcard/amit/amit.png","/mnt/sdcard/amit/amit.png","/mnt/sdcard/amit/amit.png"]
                            );
                        }

             </script>
        </body>
    </html>

EmailComposer.js

    cordova.define("cordova/plugin/emailcomposer", function(require, exports, module) {
        var exec = require('cordova/exec');

        var EmailComposer = function() {
            this.resultCallback = null; // Function
        };

        EmailComposer.ComposeResultType = {
            Cancelled:0,
            Saved:1,
            Sent:2,
            Failed:3,
            NotSent:4
        }


        // showEmailComposer : all args optional
        EmailComposer.prototype.showEmailComposer = function(successCallback,failureCallback,subject,body,toRecipients,ccRecipients,bccRecipients,bIsHTML,attachments) {
        console.log("showEmailComposer()");
        var args = {};
        if(toRecipients)
            args.toRecipients = toRecipients;
        if(ccRecipients)
            args.ccRecipients = ccRecipients;
        if(bccRecipients)
            args.bccRecipients = bccRecipients;
        if(subject)
            args.subject = subject;
        if(body)
            args.body = body;
        if(bIsHTML)
            args.bIsHTML = bIsHTML;
        if(attachments)
            args.attachments = attachments;

        cordova.exec(successCallback, failureCallback, "EmailComposer", "showEmailComposer", [args]);
    }


        var emailcomposer = new EmailComposer();
        module.exports = emailcomposer;
    });

EmailComposer.java

    package com.inic.emailattacher.emailcomposser;

    import java.io.File;
    import java.util.ArrayList;

    import org.apache.cordova.CallbackContext;
    import org.apache.cordova.CordovaPlugin;
    import org.apache.cordova.LOG;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.content.Intent;
    import android.net.Uri;
    import android.text.Html;


    public class EmailComposer extends CordovaPlugin {

       @Override
       public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
           if ("showEmailComposer".equals(action)) {

               try {
                   JSONObject parameters = args.getJSONObject(0);
                   if (parameters != null) {
                       sendEmail(parameters);
                   }
               } catch (Exception e) {

               }
               callbackContext.success();
               return true;
           }
           return false;  // Returning false results in a "MethodNotFound" error.
       }

       private void sendEmail(JSONObject parameters) {

           final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);

           //String callback = parameters.getString("callback");

           boolean isHTML = false;
           try {
               isHTML = parameters.getBoolean("bIsHTML");          
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling isHTML param: " + e.toString());
           }

           if (isHTML) {
               emailIntent.setType("text/html");
           } else {
               emailIntent.setType("text/plain");
           }

           // setting subject
           try {
               String subject = parameters.getString("subject");
               if (subject != null && subject.length() > 0) {
                   emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
               }
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling subject param: " + e.toString());
           }

           // setting body
           try {
               String body = parameters.getString("body");
               if (body != null && body.length() > 0) {
                   if (isHTML) {                                       
                       String bodyHtml = Html.fromHtml(body).toString();
                       LOG.e("EmailComposer", "Creating HTML email with body: " + bodyHtml);
                       ArrayList<String> extra_text = new ArrayList<String>();
                       extra_text.add(bodyHtml);
                       emailIntent.putStringArrayListExtra(android.content.Intent.EXTRA_TEXT, extra_text);
                   } else {
                       LOG.e("EmailComposer", "Creating text email with body: " + body);
                       ArrayList<String> extra_text = new ArrayList<String>();
                       extra_text.add(body);
                       emailIntent.putStringArrayListExtra(android.content.Intent.EXTRA_TEXT, extra_text);
                   }
               }
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling body param: " + e.toString());
           }

           // setting TO recipients
           try {
               JSONArray toRecipients = parameters.getJSONArray("toRecipients");
               if (toRecipients != null && toRecipients.length() > 0) {
                   String[] to = new String[toRecipients.length()];
                   for (int i=0; i<toRecipients.length(); i++) {
                       to[i] = toRecipients.getString(i);
                   }
                   emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, to);
               }
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling toRecipients param: " + e.toString());
           }

           // setting CC recipients
           try {
               JSONArray ccRecipients = parameters.getJSONArray("ccRecipients");
               if (ccRecipients != null && ccRecipients.length() > 0) {
                   String[] cc = new String[ccRecipients.length()];
                   for (int i=0; i<ccRecipients.length(); i++) {
                       cc[i] = ccRecipients.getString(i);
                   }
                   emailIntent.putExtra(android.content.Intent.EXTRA_CC, cc);
               }
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling ccRecipients param: " + e.toString());
           }

           // setting BCC recipients
           try {
               JSONArray bccRecipients = parameters.getJSONArray("bccRecipients");
               if (bccRecipients != null && bccRecipients.length() > 0) {
                   String[] bcc = new String[bccRecipients.length()];
                   for (int i=0; i<bccRecipients.length(); i++) {
                       bcc[i] = bccRecipients.getString(i);
                   }
                   emailIntent.putExtra(android.content.Intent.EXTRA_BCC, bcc);
               }
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling bccRecipients param: " + e.toString());
           }

           // setting attachments
           try {
               JSONArray attachments = parameters.getJSONArray("attachments");
               if (attachments != null && attachments.length() > 0) {
                   ArrayList<Uri> uris = new ArrayList<Uri>();
                   //convert from paths to Android friendly Parcelable Uri's
                   for (int i=0; i<attachments.length(); i++) {
                       try {
                           File file = new File(attachments.getString(i));
                           if (file.exists()) {
                               Uri uri = Uri.fromFile(file);
                               uris.add(uri);
                           }
                       } catch (Exception e) {
                           LOG.e("EmailComposer", "Error adding an attachment: " + e.toString());
                       }
                   }
                   if (uris.size() > 0) {
                       emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
                   }
               }
           } catch (Exception e) {
               LOG.e("EmailComposer", "Error handling attachments param: " + e.toString());
           }

           this.cordova.startActivityForResult(this, emailIntent, 0);
       }

       @Override
       public void onActivityResult(int requestCode, int resultCode, Intent intent) {
           // TODO handle callback
           super.onActivityResult(requestCode, resultCode, intent);
           LOG.e("EmailComposer", "ResultCode: " + resultCode);
           // IT DOESN'T SEEM TO HANDLE RESULT CODES
       }

    }

res->xml->config.xml

 <feature name="EmailComposer">
    <param name="android-package" value="com.inic.emailattacher.emailcomposser.EmailComposer" />
</feature>

AndroidManifest.xml

     <uses-permission android:name="android.permission.INTERNET" />

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
person Amit Prajapati    schedule 15.11.2013
comment
хм, это звучит хорошо. Позвольте мне попробовать и проверить. и еще один Вопрос. Я делаю снимок и отображаю на этом идентификаторе smallImage, что делать, если я хочу прикрепить его к своему электронному письму? - person Shivam Pandya; 15.11.2013
comment
и где разместить файл EmailComposer.java? - person Shivam Pandya; 15.11.2013
comment
создайте новый пакет, например, я создаю com.inic.emailattacher.emailcomposser, и там у меня есть EmailComposer.java - person Amit Prajapati; 15.11.2013
comment
Как я писал выше, я новичок в этом. Это хорошо для меня, если вы расскажете мне, как создать новый пакет и использовать его. вы также можете добавить меня в скайп - person Shivam Pandya; 15.11.2013
comment
Он показывает ошибку. Импорт org.apache.cordova.CallbackContext не может быть разрешен, Импорт org.apache.cordova.CordovaPlugin не может быть разрешен и Импорт org.apache.cordova.LOG не может быть разрешен в разделе импорта. - person Shivam Pandya; 15.11.2013
comment
удалить эти три строки. - person Amit Prajapati; 15.11.2013