2012-04-09 6 views
15

저는 이것이 사소한 질문 인 것 같지만 인터넷상의 어느 곳에서나 구체적인 대답을 찾을 수 없었습니다. 나는 stackoverflow에이 매우 비슷한 질문을 보았다 : How to start Unity application from android activity? 하지만 내 질문에서 정확히 반대입니다. 또한 안드로이드 액티비티는 시스템에서 다른 프로그램을 시작하기 위해 line 인수를 사용하여 system()을 호출하는 방법과 마찬가지로 Unity 애플리케이션에서 일부 입력 문자열을 수신 할 수 있어야합니다. ++ 나는 유니티 편집기를 테스트 할 때Unity 애플리케이션에서 Android 활동을 시작하는 방법은 무엇입니까?

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"); 
    } 
} 

이 응용 프로그램이 성공적으로 메모장을 엽니 다 EXE 내가 클릭 할 때 :. 다음

안드로이드에 내 테스트 유니티 응용 프로그램에 대한 테스트 버튼 이벤트 핸들러 내가 가지고있는 코드입니다 테스트 버튼에. 그러나 삼성 갤럭시 S2 기기에서 '인터넷'앱을 열려고 시도했지만 실패했습니다. 왜 이것이 사실인지 아는 사람이 있습니까? Process.Start를 사용하여 다른 Android 애플리케이션을 여는 데 필요한 올바른 문자열은 무엇입니까?

+0

나는 아무에게도이 일을 도와 줄 수 없어 슬프다. – ksming

+0

나는이 일을하는 두 가지 방법을 발견했다. UnityPlayerActivity를 확장하거나 2. 다른 활동을 시작하는 Android Native 플러그인을 만듭니다. 방법 1을 여러 번 시도했지만 항상 강제 종료 상태로 끝납니다. 잘만되면 방법 2가 나를 위해 작동 할 것이다. – ksming

+0

동일한 질문이 있습니다. 모바일 내에서 다른 Android 앱을 화합 할 수 있습니까? 오디오 레코더, 비디오 레코더 등 ... 내 화합 앱에서 오디오 레코더를 호출하고 사용자의 소리를 녹음하고 싶습니다. 이것이 가능한가? – programmer138200

답변

7

저는 Unity에 익숙하지 않지만 상당한 양의 Android 경험을 가지고 있습니다. 그러므로 권위있는 대답보다는 제 대답을 제안으로 받아주십시오.

발사 Android application from within Unity을 보면, 다음과 같은 시도 할 수 :

Integrating Unity with Eclipse에 가이드를 따르십시오. 당신이 어떤 문제에 직면하는 경우

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"); 
    } 
} 

의 로그 캣 메시지를 게시하시기 바랍니다 :

은 다음과 같습니다 1 단계에서 만든 Java 파일 수정 :

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); 
    } 
} 

을하고 유니티 코드를 수정합니다.

+0

실제로 Eclipse 통합을 사용하지 않고 제안한 것과 같은 것을 시도했습니다. UnityPlayerActivity Java 코드 확장 섹션의 http://unity3d.com/support/documentation/Manual/PluginsForAndroid.html에있는 예제입니다. Javac로 직접 컴파일을 시도하고 classes.jar로 확장 클래스를 추가하여 Extended.jar를 만들려고 시도했습니다. 나는 apk 파일을 성공적으로 만들 수있는 단계에 이르렀지만 안드로이드 장치에서 실행할 때 강제 종료가 발생합니다. 입력 된 AndroidManifest.xml 파일에 무엇이 잘못되었는지 알아 내려고 노력하고 있습니다. – ksming

+0

Eclipse 통합을 시도하는 것이 많은 작업일까요?앞서 말했듯이 Unity 프레임 워크에 익숙하지 않아서 어떤 문제가 발생했는지 이해하기가 어려울 수 있습니다. 또한 가능한 경우 강제 종료를위한 LogCat 메시지를 붙여 넣으십시오. – Rajesh

+0

Rajesh : 나는 내가 원하는 것에 가장 가깝게 답한 답을 표시 할 것입니다. – ksming

5

시도해보기 이 Launch() 메소드를 정적으로 변경하고 Android 자바 객체 ie를 전달합니다. 아래에 "jo"라고 적어주세요.

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

그것이 도움이 될 것입니다 희망 :에

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);` 

및 변경 실행() 메소드.

+0

맞습니다. 감사합니다. #Ashish Dhore – hosseinAmini

관련 문제