简体   繁体   English

用于 Unity 的 Android 插件

[英]Android plugin for Unity

Hi I'm trying to use login plugin for Unity.嗨,我正在尝试为 Unity 使用登录插件。 I put java files in Unity and customized AndroidManifest and build.gradle.我将 java 文件放在 Unity 中,并自定义了 AndroidManifest 和 build.gradle。

Build is success, but when I click the button for login nothing happen.构建成功,但是当我单击登录按钮时没有任何反应。

I think It's about Context problem.我认为这是关于上下文问题。 But I'm a beginner so I don't know what should I do.但是我是初学者,所以我不知道我该怎么做。 :( Please Help me!!!!!!!! :( 请帮我!!!!!!!!

This is Unity code.这是统一代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Login : MonoBehaviour
{
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaObject unityContext;
AndroidJavaClass plugin;

private void Awake() 
{

//Get Unity Context
unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");

plugin = new AndroidJavaClass("com.company.example.javaPlugin");
}

public void NavLogin()
{
plugin.Call("CallAndroid", unityContext);
}
}

And this is java code.这是 java 代码。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.content.Context;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class javaPlugin extends UnityPlayerActivity {

private Context context;

@Override
protected void onCreate(Bundle savedInstanceState)
{
 Log.d("#####", "onCreate()");
super.onCreate(savedInstanceState);

}

public void CallAndroid(Context context)
{
this.context = context; 
Log.d("#####", "CallAndroid()");

Intent loginIntent = new Intent(this, naverLogin.class);
context.startActivity(loginIntent);
      
}


@Override
public void onBackPressed() {
Log.d("#####", "onBackPressed()");
//super.onBackPressed();
}
}

Edit Java编辑 Java

package com.company.example;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.content.Context;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class javaPlugin extends UnityPlayerActivity {

private Context context;
Activity activity;

@Override
protected void onCreate(Bundle savedInstanceState)
{
Log.d("#####", "onCreate()");
super.onCreate(savedInstanceState);
}

 public void CallAndroid(Activity activity)
{
 this.activity = activity; 
 Log.d("#####", "CallAndroid()");

 Intent loginIntent = new Intent(this, naverLogin.class);
 activity.startActivity(loginIntent);
          
}


@Override
public void onBackPressed() {
    Log.d("#####", "onBackPressed()");
    //super.onBackPressed();
}
}

Edit Unity编辑统一

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Login : MonoBehaviour
{
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
//AndroidJavaObject unityContext;
AndroidJavaClass plugin;

public void Start() 
{
    //Get Unity Context
    unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
    //unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
    plugin = new AndroidJavaClass("com.company.example.javaPlugin");
}

public void NavLogin()
{
    plugin.Call("CallAndroid", unityActivity);
}
}

I've created a Demo Project to help you.我创建了一个演示项目来帮助您。

It has C# class:它有 C# class:

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        var unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
        var javaClass = new AndroidJavaClass("com.company.example.Test");
        javaClass.CallStatic("CallAndroid", unityActivity);
    }
}

Java class: Java class:

package com.company.example;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.content.Context;

public class Test {

    static Activity _activity;

    public static void CallAndroid(Activity activity)
    {
        _activity = activity;
        Log.d("#####", "CallAndroid() - Telemetry is fine.");

        //Continue doing what you need...
    }
}

Please make sure you created java class like this:请确保您像这样创建了 java class :

Screenshot截屏

And scripting backend is IL2CPP.脚本后端是 IL2CPP。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM