16

これは些細な質問のように思えますが、インターネット上のどこにも具体的な答えが見つかりませんでした. stackoverflow でこの非常によく似た質問を見ました: How to start Unity application from android activity? しかし、それは私の質問とは正反対です。さらに、Android アクティビティは、PC 上で別のプログラムを開始するために行引数を指定して system() 呼び出しを使用する方法と同様に、Unity アプリケーションからいくつかの入力文字列を受信できる必要があります。

以下は、Android 上のテスト Unity アプリのテスト ボタン イベント ハンドラーのコードです。

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

Unity エディターを使用してテストすると、テスト ボタンをクリックすると、アプリケーションは Notepad++.exe を正常に開きます。しかし、Samsung Galaxy S2 デバイスで「インターネット」アプリを開こうとすると失敗しました。なぜこれが事実なのか誰にも分かりますか?Process.Start を使用して別の Android アプリケーションを開くための正しい文字列は何ですか?

4

2 に答える 2

10

Unity にはあまり詳しくありませんが、Android の経験はかなりあります。したがって、私の回答は、正式な回答ではなく提案として受け取ってください。

Launching an Android application from within Unityを見ると、次のことを試すことができます。

Unity と Eclipse の統合に関するガイドに従ってください。

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

Unity コードを変更します。

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 メッセージを投稿してください。

于 2012-04-19T13:40:42.703 に答える
8

これを試してください この Launch() メソッドを static に変更し、Android Java オブジェクトを渡します。以下のように「じょう」を付けます。

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

Launch() メソッドを次のように変更します。

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

それが役立つことを願っています。

于 2013-08-01T09:23:55.557 に答える