2011-09-03 19 views
8
से एक Android गतिविधि कॉल करने के लिए

मैं PhoneGap के लिए नया हूँ और मैं PhoneGap के साथ बुनियादी एप्लिकेशन को लागू करने के लिए, अब इसे आगे बढ़ाने के लिए सक्षम हूँ, मैं Android क्रियाएँ साथ PhoneGap कनेक्ट करना चाहते हैं, मूल रूप से मैं क्या योजना है कॉल करने के लिए है जावास्क्रिप्ट फ़ंक्शन का उपयोग कर प्रारंभ करें सक्रियता() विधि।कैसे PhoneGap

मैं Communication between Android Java and Phonegap Javascript?

कोशिश की, लेकिन मैं एक गतिविधि को कॉल करने में विफल रहा है, बल करीब त्रुटि के कारण। मुझे बाहर मदद करो, एक उत्तर का इंतजार!

+1

पोस्ट त्रुटि लॉग कृपया। –

उत्तर

25

किसी भी जावा मूल निवासी कोड आह्वान के बाद के रूप में किसी भी प्लगइन का उपयोग किए बिना कहा जा रहे हैं।

निम्नलिखित कदम का पालन करें।

  1. अपने मौजूदा DroidGap गतिविधि के साथ निम्न कोड को बदलें।

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        super.init(); // Calling this is necessary to make this work 
        appView.addJavascriptInterface(this, "MainActivity"); 
    
        /* "this" points the to the object of the current activity. "MainActivity" is used to refer "this" object in JavaScript as in Step 3. */ 
    
        super.loadUrl("file:///android_asset/www/index.html"); 
    } 
    
  2. वर्तमान (इस) गतिविधि में कस्टम फ़ंक्शन को निम्नानुसार जोड़ें।

    public void customFunctionCalled() { 
        Log.e("Custom Function Called", "Custom Function Called"); 
    } 
    
  3. अब इस फ़ंक्शन को अपने HTML/जावास्क्रिप्ट कोड से निम्नानुसार कॉल करें।

    <script type="text/javascript"> 
        function callNewActivity() { 
         window.MainActivity.customFunctionCalled(); 
        } 
    </script> 
    

यह MainActivity में customFunctionCalled() कॉल करेंगे।

परीक्षण पर्यावरण ग्रहण - 3.7.2 Android 2.2 एम्यूलेटर PhoneGap - 2.0.0

ब्लॉग पोस्ट में सुधार करने के अपनी टिप्पणी दें यहाँ। http://phonegapexplorers.blogspot.in/2012/08/call-native-java-code-phonegap-android.html

+0

मैं एक लंबे समय के लिए उपयोग किया गया था। लेकिन हाल ही में एंड्रॉइड 4.2.2 के साथ कुछ समस्या है। वेब से सीखें कि यह sdk> = 17 के साथ सही तरीके से काम कर रहा है। क्या आप मुझे बता सकते हैं कि मुझे एसडीके> = 17 के साथ काम करने के लिए आवश्यक परिवर्तन बताएं ?? – AtanuCSE

+0

@AvtarSingh Suchariya Hy मैंने आपके ट्यूटोरियल का पालन किया लेकिन मुझे मिलता है: 07-08 23: 44: 04.845: ई/वेब कंसोल (25296): अनकॉट टाइप एरर: ऑब्जेक्ट [ऑब्जेक्ट ऑब्जेक्ट] में कोई विधि नहीं है 'customFunctionCalled' फ़ाइल पर: /// android_asset/www/js/index.js: 31 वह क्यों है? मैंने सोचा कि लक्ष्य एसडीके 17 या उससे अधिक है (मुझे लगता है कि यह मेरा मामला है) में कुछ संशोधन होना चाहिए। लेकिन मुझे नहीं पता कि वे क्या हैं। क्या आप मेरी मदद कर सकते हैं? –

+0

@AtanuCSE हाई मैन क्या आपने स्क्रिप्ट का उपयोग एसडीके> = 17 के साथ करने के लिए किया है? क्या आप कृपया मुझे बता सकते हैं कि यह कैसे करें? –

2

इसके कि वास्तव में आप क्या करने की कोशिश कर रहे हैं, लेकिन एक प्लगइन लिखने की सड़क के नीचे जा रहा क्या बारे में और अधिक जानने के बिना मुश्किल शायद जाने के लिए रास्ता है। चेक आउट;

http://smus.com/android-phonegap-plugins

इस प्लगइन आप के लिए काम कर सकते हैं के रूप में है, या आप यह कैसे अपने आप को ऐसा करने के लिए अच्छा संकेत दे।

0

मैं कोशिश करता हूं कि आप पहले क्या करना चाहते हैं, संस्करण 2.0.0 पर फोनगैप पर अपडेट के साथ और प्लगइन के साथ सबसे अच्छा तरीका है। यह संपत्ति फ़ोल्डर के भीतर फोनगैप पर जेएस है। आईडी "nativecall" और एक नमूना बटन के साथ div तत्व का निर्माण करने का पता लगाने के it.Be त्रुटि संदेश की जाँच करने के LogCat देखने के लिए सुनिश्चित करें कि है सुनिश्चित करें।

window.echo = function(str, callback) { 
    cordova.exec(callback, function(err) { 
     callback('Nothing to echo.'); 
    }, "Echo", "echo", [str]); 
}; 

var app = { 
    // Application Constructor 
    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
    }, 
    // deviceready Event Handler 
    // 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
    // function, we must explicity call 'app.receivedEvent(...);' 
    onDeviceReady: function() { 
     app.receivedEvent('deviceready'); 
    }, 
    // Update DOM on a Received Event 
    receivedEvent: function() { 

     var abiter = $('#nativecall').html(); 

      $("#abutton").click(function() { 
        window.echo(abiter, function(echoValue) { 
        alert(echoValue = abiter); // should alert true. 
       }); 
      }); 


    } 
}; 

app.initialize(); 

सेवा पर "ईको" सेवा नाम के साथ नई कक्षा विधि जोड़ें।

package org.apache.cordova.plugin; 

import org.apache.cordova.api.CallbackContext; 
import org.apache.cordova.plugin.AndroidActivities; 
import org.apache.cordova.api.CordovaPlugin; 
import org.json.JSONArray; 
import org.json.JSONException; 

/** 
* This class echoes a string called from JavaScript. 
*/ 
public class Echo extends CordovaPlugin { 
    @Override 
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
     if (action.equals("echo")) { 
      String message = args.getString(0); 
      new AndroidPublicFunction(message); //call function from AndroidActivities 
      this.echo(message, callbackContext); 
      return true; 
     } 
     return false; 
    } 

    private void echo(String message, CallbackContext callbackContext) { 
     if (message != null && message.length() > 0) { 
      callbackContext.success(message); 
     } else { 
      callbackContext.error("Expected one non-empty string argument."); 
     } 
    } 
} 
संबंधित मुद्दे