2011-08-29 3 views
6

से इरादा कैसे चलाएं मैं एंड्रॉइड और जावा में नया हूं। मैंने HTML/जावास्क्रिप्ट का उपयोग करके एक ऐप बनाया है जो बहुत अच्छा काम कर रहा है।एंड्रॉइड - जावास्क्रिप्ट

अब मुझे एक ऐसी गतिविधि बनाने की आवश्यकता है जो ईमेल क्लाइंट लॉन्च करे, विषय और शरीर में भरें, और (कठिन हिस्सा) फ़ाइल संलग्नक जोड़ता है। मैं जावास्क्रिप्ट के भीतर से ऐसा करने में सक्षम नहीं हूं, mailto: फ़ाइल संलग्न नहीं करेगा।

इसलिए मुझे जावा के माध्यम से इसे पूरा करने और जावास्क्रिप्ट से निष्पादित करने की आवश्यकता है। मुझे लगता है कि यह addJavaScriptInterface का उपयोग करके किया जा सकता है लेकिन मुझे जाने के लिए कोई विस्तृत दस्तावेज या उदाहरण नहीं मिल रहा है।

मैं यह कैसे कर सकता हूं?

यहाँ मैं क्या किया है अब तक प्रलेखन पढ़ने के बाद: फिर

MainActivity.java

public class MainActivity extends DroidGap { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setIntegerProperty("splashscreen", R.drawable.splash); 
    super.loadUrl("file:///android_asset/www/index.html", 1000); 
    WebView mWebView; 
    mWebView = (WebView)findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.addJavascriptInterface(new JavaScriptInterface(), "Android"); 
} 
} 

public class JavaScriptInterface { 

public void doEmail(){ 
    Intent sendIntent = new Intent(Intent.ACTION_SEND); 
    sendIntent.setType("text/html"); 
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text"); 
    sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject"); 
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html")); 
    startActivity(Intent.createChooser(sendIntent, "Send email...")); 
    } 
} 

JavaScriptInterface.java

:

कोड के लिए 2 अद्यतन मैं Android.doEmail() का उपयोग करके जावास्क्रिप्ट के माध्यम से इरादे का संदर्भ दूंगा ।

ऊपर कोड मैं ग्रहण 1. विधि startActivity (आशय) में 2 त्रुटियों हो रही है के साथ प्रकार के लिए अपरिभाषित है - JavaScriptInterface 2. वेबव्यू हल नहीं किया जा सकता है या एक क्षेत्र नहीं है - MainActivity

क्या क्या मैं गलत कर रहा हूँ?

उत्तर

4
public class MainActivity extends DroidGap { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setIntegerProperty("splashscreen", R.drawable.splash); 

     JavaScriptInterface jsi = new JavaScriptInterface(this, appView); 
     appView.addJavascriptInterface(jsi, "Android"); 

     super.loadUrl("file:///android_asset/www/index.html", 1000); 
    } 
} 

और

public class JavaScriptInterface { 
    private WebView mAppView; 
    private DroidGap mGap 

    public JavaScriptInterface (DroidGap gap, WebView view) 
    { 
     mAppView = view; 
     mGap = gap; 
    } 

    public void doEmail(){ 
     Intent sendIntent = new Intent(Intent.ACTION_SEND); 
     sendIntent.setType("text/html"); 
     sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text"); 
     sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject"); 
     sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html")); 
     startActivity(Intent.createChooser(sendIntent, "Send email...")); 
    } 
} 
+0

मेरे पास पहले से ही 'मुख्य गतिविधि' है। क्या मैं यहां अन्य सामान शामिल करूंगा? 'पब्लिक क्लास मेनएक्टिविटी DroidGap को बढ़ाती है {/ ** जब गतिविधि पहली बार बनाई जाती है तो कॉल किया जाता है। */@ ओवरराइड सार्वजनिक शून्य पर क्रिएट (बंडल सेव किया गया इंस्टेंसस्टेट) {super.onCreate (savedInstanceState); super.setIntegerProperty ("स्प्लैशस्क्रीन", R.drawable.splash); super.loadUrl ("फ़ाइल: ///android_asset/www/index.html", 1000); }} ' – user899641

+0

क्षमा करें, मुझे नहीं पता कि कोड को ऊपर की तरह साफ कैसे करें ... – user899641

+0

http://stackoverflow.com/questions/2727763/communication-between-android-java-and-phonegap-javascript – adamcodes

2

addJavaScriptInterface का उपयोग करके एम्बेडेड ब्राउज़र के अंदर डीओएम का विस्तार होगा, और जेएस को जावा ऑब्जेक्ट तक पहुंचने की अनुमति देगा, जो वास्तव में आप चाहते हैं।

यहां रूपरेखा के लिए बहुत सारे कदम हैं, जिन्हें पहले से ही दस्तावेज किया गया है। यह link का एक अच्छा अवलोकन है।

+0

मैंने अपना प्रश्न संपादित किया और अब तक जो कुछ भी है, उसे शामिल किया। क्या आप मुझे बता सकते हैं कि मैं क्या गलत कर रहा हूं? – user899641

6

This documentation आपको बताता है कि यह कैसे करना है।

ऐसा लगता है कि तीन मुख्य कदम देखते हैं दिखता है:

  1. अपना 'इंटरफ़ेस' एंड्रॉयड
  2. में वर्ग के लिए WebView प्रयोग कर रहे हैं इस 'इंटरफ़ेस' का एक उदाहरण जोड़ें।
  3. अपनी जावास्क्रिप्ट से इंटरफ़ेस को कॉल करें।
+0

ठीक है, मैंने अपना प्रश्न संपादित किया और इसमें अब तक जो कुछ भी है, शामिल है। क्या आप मुझे बता सकते हैं कि मैं क्या गलत कर रहा हूं? – user899641

+0

आपकी 'जावास्क्रिप्ट इंटरफेस' वर्ग को 'गतिविधि'' नहीं बढ़ाया जाना चाहिए। यह अपनी खुद की कक्षा होगी जिसमें 'send()' विधि होगी। आपकी 'गतिविधि' कक्षा को आपके कोड 'भेजें() 'विधि (' वेब व्यू' भाग) –

+0

@ nicholas.hauschild का दूसरा भाग करना चाहिए, मैं उसी दस्तावेज़ीकरण का पालन करता हूं लेकिन टोस्ट संदेश कोई आग क्यों नहीं। – NagarjunaReddy

0

मैं बोरिस Smus (http://smus.com/android-phonegap-plugins) से WebIntents इस्तेमाल किया है और यह एक आकर्षण की तरह काम करता है। प्लगइन के साथ किए गए दृष्टिकोण को बेहतर ढंग से समझने के लिए आप अपने कोड को थोड़ा सा भी समझ सकते हैं।

नोट: आपको प्रदान की गई कोड को अपडेट करने की आवश्यकता है (टिप्पणियां देखें) और प्लगइन आर्किटेक्चर थोड़ा बदल गया है।

संबंधित मुद्दे