Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Unity > Программирование для мобильных устройств

Программирование для мобильных устройств Android, iOS и другие

Ответ
 
Опции темы
Старый 13.04.2013, 12:47   #1
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,094
Написано 486 полезных сообщений
(для 988 пользователей)
Вызов сторонних методов Android

Приспичило мне BT прицепить к Unity (Android), пошарился по докам и погуглив я нашел это:
http://docs.unity3d.com/Documentatio...orAndroid.html
(в самом конце можно скачать пример)
и это:
http://developer.android.com/guide/t...bluetooth.html
http://journals.ecs.soton.ac.uk/java...ng/method.html
http://www.codeproject.com/Articles/...face-in-Csharp

А так как я почти ничего не понял из примера, то как можно сделать так:
BluetoothAdapter mBluetoothAdapter BluetoothAdapter.getDefaultAdapter();
if (
mBluetoothAdapter == null) {
    
// Device does not support Bluetooth

с помощью JNI?
Скрипт с примера:

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;

public class 
CallJavaCode MonoBehaviour {

    private 
IntPtr    JavaClass;
    private 
int        getActivityCacheDir;
    
void Start ()
    {
        
// attach our thread to the java vm; obviously the main thread is already attached but this is good practice..
        
JavaVM.AttachCurrentThread();

        
// first we try to find our main activity..
        
IntPtr cls_Activity    JNI.FindClass("com/unity3d/player/UnityPlayer");
        
int fid_Activity    JNI.GetStaticFieldID(cls_Activity"currentActivity""Landroid/app/Activity;");
        
IntPtr obj_Activity    JNI.GetStaticObjectField(cls_Activityfid_Activity);
        
Debug.Log("obj_Activity = " obj_Activity);
        
        
// create a JavaClass object...
        
IntPtr cls_JavaClass    JNI.FindClass("org/example/ScriptBridge/JavaClass");
        
int mid_JavaClass        JNI.GetMethodID(cls_JavaClass"<init>""(Landroid/app/Activity;)V");
        
IntPtr obj_JavaClass    JNI.NewObject(cls_JavaClassmid_JavaClassobj_Activity);
        
Debug.Log("JavaClass object = " obj_JavaClass);

        
// create a global reference to the JavaClass object and fetch method id(s)..
        
JavaClass            JNI.NewGlobalRef(obj_JavaClass);
        
getActivityCacheDir    JNI.GetMethodID(cls_JavaClass"getActivityCacheDir""()Ljava/lang/String;");
        
Debug.Log("JavaClass global ref = " JavaClass);
        
Debug.Log("JavaClass method id = " getActivityCacheDir);
    }

    private 
string cacheDir "Push to get cache dir";
    
void OnGUI ()
    {
        if (
GUI.Button(new Rect (15125450100), cacheDir))
        {
            
String cache getCacheDir();
            
Debug.Log("getCacheDir returned " cache);
            
cacheDir cache;
        }
    }
    
    private 
string getCacheDir()
    {
        
// again, make sure the thread is attached..
        
JavaVM.AttachCurrentThread();

        
// get the Java String object from the JavaClass object
        
IntPtr str_cacheDir     JNI.CallObjectMethod(JavaClassgetActivityCacheDir);
        
Debug.Log("str_cacheDir = " str_cacheDir);
    
        
// convert the Java String into a Mono string
        
IntPtr stringPtr JNI.GetStringUTFChars(str_cacheDir0);
        
Debug.Log("stringPtr = " +stringPtr);
        
String cache Marshal.PtrToStringAnsi(stringPtr);
        
JNI.ReleaseStringUTFChars(str_cacheDirstringPtr);

        
Debug.Log("return value is = " cache);

        return 
cache;
    }


__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 13.04.2013, 15:20   #2
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,094
Написано 486 полезных сообщений
(для 988 пользователей)
Ответ: Вызов сторонних методов Android

Разобрался кароче я с этой хренью почти, пришлось писать на Java(.
Скрипт JavaClass:
package org.example.ScriptBridge;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.os.Bundle;

import android.util.Log;
import java.io.File;


public class 
JavaClass
{
    private 
Activity mActivity;
    public 
JavaClass(Activity currentActivity)
    {
        
Log.i("JavaClass""Constructor called with currentActivity = " currentActivity);
        
mActivity currentActivity;
    }
    
    
// we could of course do this straight from native code using JNI, but this is an example so.. ;)
    
public String getActivityCacheDir()
    {
        
// calling Context.getCacheDir();
        // http://developer.android.com/reference/android/content/Context.html#getCacheDir()
        //
        
File cacheDir mActivity.getCacheDir();
        
String path cacheDir.getPath();
        
Log.i("JavaClass""getActivityCacheDir returns = " path);
        return 
path;
    }
    public 
boolean initBluetooth(){
    
    
BluetoothAdapter BT BluetoothAdapter.getDefaultAdapter();
        if (
BT == null) {
                return 
false;
        }
        if(!
BT.isEnabled())
                {
                    
Intent enableBtIntent = new Intent(BT.ACTION_REQUEST_ENABLE); 
                    
startActivityForResult(enableBtIntentREQUEST_ENABLE_BT);
                        
//Toast.makeText(getApplicationContext(), "Enabling Bluetooth!!", Toast.LENGTH_LONG).show();
                
}
        return 
true;
        }

Что бы его собрать пришлось скачать ANT http://ant.apache.org
*замечу что ANT не собирал почему-то с startActivityForResult;
C# модифицировал в(100% с косяками):
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;

public class 
CallJavaCode MonoBehaviour {

    private 
IntPtr    JavaClass;
    private 
int        btOpen;
    
void Start ()
    {
        
// attach our thread to the java vm; obviously the main thread is already attached but this is good practice..
        
JavaVM.AttachCurrentThread();

        
// first we try to find our main activity..
        
IntPtr cls_Activity    JNI.FindClass("com/unity3d/player/UnityPlayer");
        
int fid_Activity    JNI.GetStaticFieldID(cls_Activity"currentActivity""Landroid/app/Activity;");
        
IntPtr obj_Activity    JNI.GetStaticObjectField(cls_Activityfid_Activity);
        
Debug.Log("obj_Activity = " obj_Activity);
        
        
// create a JavaClass object...
        
IntPtr cls_JavaClass    JNI.FindClass("org/example/ScriptBridge/JavaClass");
        
int mid_JavaClass        JNI.GetMethodID(cls_JavaClass"<init>""(Landroid/app/Activity;)V");
        
IntPtr obj_JavaClass    JNI.NewObject(cls_JavaClassmid_JavaClassobj_Activity);
        
Debug.Log("JavaClass object = " obj_JavaClass);

        
// create a global reference to the JavaClass object and fetch method id(s)..
        
JavaClass            JNI.NewGlobalRef(obj_JavaClass);
        
btOpen    JNI.GetMethodID(cls_JavaClass"initBluetooth""()Z");
//        Debug.Log("JavaClass global ref = " + JavaClass);
//        Debug.Log("JavaClass method id = " + getActivityCacheDir);
    
}

    private 
string cacheDir "Push to BT test";
    
void OnGUI ()
    {
        if (
GUI.Button(new Rect (15125450100), cacheDir))
        {
            
bool cache BTOPEN();
            
cacheDir cache.ToString();
        }
    }
    
    private 
bool BTOPEN()
    {
        
// again, make sure the thread is attached..
        
JavaVM.AttachCurrentThread();

        
int ret     JNI.CallBooleanMethod(JavaClassbtOpen);
        if(
ret == 0)
            return 
false;
        return 
true;
    }


Прога запукается, но вылетает при нажатии на кнопку.
Теперь вопрос, как все-таки это сделать?(Хотя бы включить BT)
JDKmans,помогите
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 22:18.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com