2012-04-09 13 views
15

मुझे पता है कि यह एक मामूली सवाल प्रतीत होता है लेकिन मुझे इंटरनेट पर कहीं भी ठोस जवाब नहीं मिला। मैंने stackoverflow पर यह बहुत ही समान प्रश्न देखा: How to start Unity application from android activity? लेकिन यह मेरे प्रश्न से बिल्कुल विपरीत है। इसके अतिरिक्त एंड्रॉइड गतिविधि एकता अनुप्रयोग से कुछ इनपुट स्ट्रिंग प्राप्त करने में सक्षम होना चाहिए जैसे कि एक पीसी पर एक और प्रोग्राम शुरू करने के लिए लाइन तर्क के साथ सिस्टम() कॉल का उपयोग कैसे करता है। ++ exe जब मैं क्लिकएकता अनुप्रयोग से एंड्रॉइड गतिविधि कैसे शुरू करें?

private void ExternalAppCallHandler() 
{ 
    if(Application.platform == RuntimePlatform.WindowsEditor) 
    { 
     Process.Start(@"C:\Program Files (x86)\Notepad++\notepad++.exe"); 
    } 
    else if(Application.platform == RuntimePlatform.Android) 
    { 
     Process.Start("Internet"); 
    } 
} 

मैं का उपयोग करते हैं परीक्षण करने के लिए एकता संपादक, आवेदन सफलतापूर्वक नोटपैड को खोलता है:।

निम्नलिखित कोड Android पर अपने परीक्षण एकता अनुप्रयोग के लिए एक परीक्षण बटन ईवेंट हैंडलर के लिए मेरे पास है परीक्षण बटन पर। हालांकि, जब मैंने अपने सैमसंग गैलेक्सी एस 2 डिवाइस पर "इंटरनेट" ऐप खोलने की कोशिश की तो यह असफल रहा। क्या कोई जानता है कि यह मामला क्यों है? Process.Start का उपयोग कर एक और एंड्रॉइड एप्लिकेशन खोलने के लिए सही स्ट्रिंग क्या होनी चाहिए?

+0

मुझे बहुत दुख है कि कोई भी मेरी मदद कर सकता है ... – ksming

+0

मुझे ऐसा करने के दो तरीके मिल गए हैं: 1। UnityPlayerActivity या 2. एक एंड्रॉइड मूल प्लगइन बनाएं जो एक और गतिविधि शुरू करता है। मैंने विधि 1 को कई बार कोशिश की है लेकिन यह हमेशा मजबूर-बंद स्थिति में समाप्त होती है। उम्मीद है कि विधि 2 मेरे लिए काम करेगी। – ksming

+0

मेरे पास एक ही सवाल है। क्या संभव है कि हम एकता में मोबाइल में एक और एंड्रॉइड ऐप कॉल करें? ऑडियो रिकॉर्डर, वीडियो रिकॉर्डर, जैसे ... मैं अपने एकता ऐप कॉल ऑडियो रिकॉर्डर और उपयोगकर्ता की रिकॉर्ड ध्वनि में चाहता हूं। क्या यह संभव है? – programmer138200

उत्तर

7

मैं एकता से बहुत परिचित नहीं हूं, लेकिन इसमें उचित Android अनुभव है। तो एक आधिकारिक उत्तर के बजाय एक सुझाव के रूप में मेरा जवाब ले लो।

का शुभारंभ एक Android application from within Unity को देखते हुए, आप निम्नलिखित की कोशिश कर सकते:

Integrating Unity with Eclipse पर गाइड का पालन करें।

नीचे के रूप में चरण 1 में बनाया जावा फ़ाइल को संशोधित करें:

package com.Unity3D.EclipseIntegration; 

import android.os.Bundle; 

import com.unity3d.player.UnityPlayerActivity; 

public class EclipseIntegration extends UnityPlayerActivity { 

    private Intent myIntent; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Assuming that we want to launch the browser to browse a website 
     Uri uri = Uri.parse("http://www.google.com"); 
     myIntent= new Intent(Intent.ACTION_VIEW, uri); 
    } 

    public void Launch() 
    {  
     startActivity(myIntent); 
    } 
} 

और अपने एकता कोड को संशोधित:

private void ExternalAppCallHandler() 
{ 
    if(Application.platform == RuntimePlatform.WindowsEditor) 
    { 
     Process.Start(@"C:\Program Files (x86)\Notepad++\notepad++.exe"); 
    } 
    else if(Application.platform == RuntimePlatform.Android) 
    { 
     AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
     AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
     jo.Call("Launch"); 
    } 
} 

मामले में आप किसी भी समस्याओं का सामना कर रहे, LogCat संदेशों पोस्ट करें।

+0

असल में, मैंने कुछ सुझाव दिया है जो आपने सुझाया है लेकिन ग्रहण एकीकरण के बिना। यह यूनिटीप्लेयरएक्टिविटी जावा कोड सेक्शन को विस्तारित करने के तहत http://unity3d.com/support/documentation/Manual/PluginsForAndroid.html में उदाहरण से है। Javac के साथ सीधे संकलन करने और class.jar के साथ विस्तारित कक्षा जोड़ने के लिए विस्तारित .jar बनाने के लिए प्रयास किया। मैं मंच पर भी पहुंचा जहां मैं एपीके फ़ाइल सफलतापूर्वक बना सकता हूं लेकिन जब मैं इसे एंड्रॉइड डिवाइस पर चलाता हूं, तो मजबूर होना बंद होता है। एंड्रॉइडManifest.xml फ़ाइल इनपुट में क्या गलत है यह जानने की कोशिश कर रहे मेरे बाल खींच रहे हैं। – ksming

+0

क्या एक्लिप्स एकीकरण को आज़माने के लिए यह बहुत काम करेगा?जैसा कि मैंने कहा, मैं एकता ढांचे से परिचित नहीं हूं, इसलिए मेरे लिए यह समझना मुश्किल होगा कि आपको किस समस्या का सामना करना पड़ सकता है। साथ ही, यदि संभव हो, तो लॉग -ट संदेशों को अपने बल-बंद करने के लिए पेस्ट करें। – Rajesh

+0

राजेश: मैं आपके उत्तर को सही के रूप में चिह्नित करूंगा क्योंकि वे जो चाहते हैं उसके सबसे नज़दीकी लगते हैं। – ksming

5

इस को आजमाएं इस लॉन्च() विधि को स्थैतिक में बदलें और एंड्रॉइड जावा ऑब्जेक्ट को पास करें यानी। इसे "जो" नीचे की तरह है।

AndroidJavaClass androidJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject jo= androidJC.GetStatic<AndroidJavaObject>("currentActivity"); 
AndroidJavaClass jc = new AndroidJavaClass("package_name.Ur_Actvity_Name"); 
jc.CallStatic("Launch",jo);` 

और परिवर्तन लॉन्च() विधि करने के लिए:

public static Launch(Activity activity) 
{ 
Intent myIntent = new Intent(); 
activity.startActivity(myIntent); 
} 

आशा है कि यह मदद मिलेगी।

+0

यह सही है, धन्यवाद # आशीष धूर – hosseinAmini

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