Nano Hash - криптовалюты, майнинг, программирование

Android-плагин для Unity

Привет, я пытаюсь использовать плагин входа в систему для Unity. Я поместил java-файлы в Unity и настроил AndroidManifest и build.gradle.

Сборка прошла успешно, но когда я нажимаю кнопку входа в систему, ничего не происходит.

Я думаю, что это проблема контекста. Но я новичок, поэтому не знаю, что мне делать. :( Пожалуйста, помогите мне!!!!!!!!

Это код единства.

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

И это 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();
}
}

Изменить 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();
}
}

Изменить Единство

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

Ответы:


1

Чтобы помочь вам, я создал демонстрационный проект.

Он имеет класс С#:

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-класс:

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...
    }
}

Пожалуйста, убедитесь, что вы создали класс Java следующим образом:

Снимок экрана

А скриптовый бэкэнд — IL2CPP.

01.02.2021
  • Спасибо за ваш ответ! Я пробовал это, но все равно ничего не происходит, я экспортирую apk и открываю в AndroidStudio. Я вижу onCreate() под r####, но не вижу CallAndroid(). И когда я нажимаю кнопку, в Logcat нет отладки. Я добавляю сюда свой код редактирования, вы можете его проверить?? 01.02.2021
  • Я создал пример проекта для вас. Пожалуйста, смотрите отредактированный ответ. Удачи с проектом! 01.02.2021
  • Я тестирую этот код, и теперь у меня новая проблема. Я не могу использовать this.activiy = activiy ; с ошибкой com.company.example.javaPlugin.this 'не может ссылаться из статического контекста. Я попытаюсь решить эту проблему. В любом случае, спасибо за ваши усилия !!! :) 01.02.2021
  • Да, я исправил код Java. Пожалуйста, примите ответ. 01.02.2021
  • Не работает,,,но спасибо! 02.02.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..