如何在Phonegap中安装插件

时间:2013-11-15 05:44:41

标签: android ios cordova hybrid-mobile-app

我是手机新手中的新手,并且正在开发一款适用于Android和IOS的应用程序。 现在,我的要求是我想发送带附件的电子邮件,所以我通过Internet搜索并找到了这个插件,EmailComposer-phonegap-plugin。他们在那里写了4点如下。

  1. 将EmailComposer.h EmailComposer.m文件添加到您的插件文件夹。
  2. 将EmailComposer.js文件放在www文件夹中的某个位置,并将其包含在HTML中。
  3. 在插件下添加到config.xml:或者,如果使用新格式,

    <feature name="EmailComposer"> <param name="ios-package" value="EmailComposer" /> </feature>
    
  4. 在android上,在value属性中也一定要包含包名,例如

    value="org.apache.cordova.EmailComposer"
    
  5. 现在我的查询是如何使用这个插件? 我做了第二点,但不知道我把文件放在第一点的位置?因为我不知道我的&#34; Plug-in&#34;夹。以及如何使用第3点和第4点?

    我也通过互联网查找此代码。但是&#34;附上文件&#34;警报不起作用。

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

    那么,我必须做些什么来发送附加邮件成功?

2 个答案:

答案 0 :(得分:0)

试试这个对我而言......

的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:",
                                 ["amitd.prajapati@test.com"],
                                 [],
                                 [],
                                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
       }

    }

水库&GT; XML-&GT; 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" />

答案 1 :(得分:0)

在“res / xml / config.xml”中定义你的插件

在文件中找到这些行

<feature name="App">
        <param name="android-package" value="org.apache.cordova.App" />
</feature>

并在以下后附加这些:

<feature name="MyPluginName">
        <param name="android-package" value="com.phonegap.plugins.plugin.class" />
</feature>

用实际名称替换虚拟名称(MyPluginName,plugins.plugin.class等)。这很有效。

但这在Android