web-dev-qa-db-ja.com

UnityアプリケーションからAndroidアクティビティを開始する方法は?

これは簡単な質問のように思えますが、インターネット上で具体的な答えを見つけることができませんでした。私はこの非常によく似た質問をstackoverflowで見ました: nityアプリケーションを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 Editorを使用してテストする場合、テストボタンをクリックすると、アプリケーションはNotepad ++。exeを正常に開きます。しかし、Samsung Galaxy S2デバイスで「インターネット」アプリを開こうとすると、失敗しました。これが事実である理由を誰かが知っていますか? Process.Startを使用して別のAndroidアプリケーションを開くための正しい文字列は何ですか?

15
ksming

私はUnityにはあまり詳しくありませんが、Android=の経験が豊富です。ですから、私の答えを信頼できる答えではなく、提案として受け取ってください。

Launching nity内からのAndroidアプリケーション を見ると、次のことを試すことができます。

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

9
Rajesh

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

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

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

7
Ashish Dhore