2012-04-09 34 views
15

Tôi biết điều này có vẻ là một câu hỏi tầm thường nhưng tôi không thể tìm thấy bất kỳ câu trả lời cụ thể bất cứ nơi nào trên internet. Tôi thấy câu hỏi này rất giống nhau trên stackoverflow: How to start Unity application from android activity? nhưng nó hoàn toàn trái ngược với câu hỏi của tôi. Ngoài ra, hoạt động android phải có khả năng nhận được một số chuỗi đầu vào từ ứng dụng Unity giống như cách sử dụng hệ thống() với các đối số dòng để bắt đầu một chương trình khác trên PC.Làm thế nào để bắt đầu một hoạt động Android từ một ứng dụng Unity?

Sau đây là đoạn code tôi có một nút kiểm tra xử lý sự kiện cho ứng dụng Unity thử nghiệm của tôi trên 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"); 
    } 
} 

Khi tôi sử dụng Unity Editor để thử nghiệm, ứng dụng sẽ mở ra thành công Notepad ++ exe khi tôi nhấp. trên nút kiểm tra. Tuy nhiên, khi tôi cố mở ứng dụng "Internet" trên thiết bị Samsung Galaxy S2 của tôi thì nó không thành công. Có ai biết tại sao đây là trường hợp? Chuỗi phải chính xác để mở một ứng dụng Android khác bằng Process.Start là gì?

+0

Tôi rất buồn không ai có thể giúp tôi với điều này ... – ksming

+0

Tôi đã tìm thấy hai cách để thực hiện việc này: 1. Mở rộng UnityPlayerActivity hoặc 2. Tạo một plugin Native của Android bắt đầu một hoạt động khác. Tôi đã thử phương pháp 1 nhiều lần nhưng nó luôn luôn kết thúc trong tình huống cưỡng bức. Hy vọng rằng phương pháp 2 sẽ làm việc cho tôi. – ksming

+0

Tôi có cùng một câu hỏi. Có thể chúng tôi gọi một ứng dụng Android khác trên thiết bị di động trong sự thống nhất không? Chẳng hạn như máy ghi âm, máy ghi hình, ... Tôi muốn trong ứng dụng kết hợp âm thanh ghi âm cuộc gọi và ghi lại âm thanh của người dùng. Điều này có thể không? – programmer138200

Trả lời

7

Tôi không quen thuộc với Unity, nhưng có một số tiền hợp lý về trải nghiệm Android. Vì vậy, lấy câu trả lời của tôi như là một đề nghị chứ không phải là một câu trả lời có thẩm quyền.

Nhìn vào ra mắt một Android application from within Unity, bạn có thể thử như sau:

Thực hiện theo các hướng dẫn trên Integrating Unity with Eclipse.

Sửa đổi các tập tin Java được tạo ra ở bước 1 như sau:

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

và sửa đổi mã Unity của bạn:

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

Trong trường hợp bạn đang phải đối mặt với bất kỳ vấn đề, xin vui lòng gửi những thông điệp LogCat.

+0

Trên thực tế, tôi đã thử một cái gì đó giống như những gì bạn đã đề xuất nhưng không sử dụng tích hợp Eclipse. Đó là từ ví dụ trong http://unity3d.com/support/documentation/Manual/PluginsForAndroid.html trong phần Mở rộng mã Java của UnityPlayerActivity. Đã cố gắng biên dịch trực tiếp với Javac và thêm lớp mở rộng với classes.jar để tạo tệp Extended.jar. Tôi thậm chí đã đạt đến giai đoạn mà tôi có thể xây dựng các tập tin apk thành công nhưng khi tôi chạy nó trên thiết bị Android, buộc phải đóng xảy ra. Đã được kéo tóc của tôi cố gắng tìm ra những gì là sai với các tập tin AndroidManifest.xml đầu vào. – ksming

+0

Có phải là rất nhiều công việc để thử nghiệm tích hợp Eclipse?Như tôi đã nói, tôi không quen thuộc với khuôn khổ Unity, vì vậy sẽ rất khó cho tôi để hiểu những vấn đề bạn có thể phải đối mặt. Ngoài ra, nếu có thể, hãy dán các thông điệp LogCat cho lực đóng của bạn. – Rajesh

+0

Rajesh: Tôi sẽ đánh dấu câu trả lời của bạn là chính xác vì chúng dường như gần nhất với những gì tôi muốn. – ksming

5

hãy thử điều này Thay đổi phương thức Launch() này thành tĩnh và chuyển đối tượng java Android tức là. "jo" vào nó như dưới đây.

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

và thay đổi Launch() phương pháp để:

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

Hy vọng nó sẽ giúp.

+0

chính xác, cảm ơn #Ashish Dhore – hosseinAmini

Các vấn đề liên quan