2013-12-16 10 views
6

में एंड्रॉइड जार तक पहुंचने के लिए मेरे पास कैमरा फ्लैशलाइट के लिए एक एंड्रॉइड प्रोजेक्ट है, जो ग्रहण से तैनात होने पर ठीक काम करता है। मैं अपने सी # कोड से एकता 3 डी में फ्लैशलाइट फ़ंक्शन तक पहुंचने का प्रयास कर रहा हूं लेकिन यह काम नहीं करता है। यह सत्यापित करने के लिए कि क्या मैं एंड्रॉइड विधि को सही तरीके से कॉल कर रहा हूं, मैंने एक ही गतिविधि में एक स्ट्रिंग फ़ंक्शन बनाया है और यह स्ट्रिंग को सही तरीके से वापस कर रहा है। मैं मूल एंड्रॉइड कोडिंग से परिचित नहीं हूँ। यह अच्छा होगा अगर आप कोड को देख सकें और मेरी मदद कर सकें।unity3d

मुझे पता है कि एकता मंच में कुछ धागे हैं और स्टैक ओवरफ्लो समझाते हैं, मैंने इन धागे पर समाधान खोजने की कोशिश की लेकिन कोई भाग्य नहीं! तो, यह धागा पोस्ट ..

नीचे एंड्रॉयड MainActivity.java है (जो मैं ग्रहण से एक जार फ़ाइल में परिवर्तित कर दिया और एकता परियोजना में नकल, ~ आस्तियों/प्लगइन्स/एंड्रॉयड/bin /),

package com.example.newflash; 

import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Window; 
import android.view.WindowManager; 

public class MainActivity extends Activity { 

    private static Camera camera; 
    private static Parameters parameters; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     //Hide the window title. 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    } 

    public static String dummyString() 
    { 
     return "dummy string"; 
    } 

    public static void setFlashOn() 
    { 
     if (camera == null) 
      camera = Camera.open(); 
     parameters = camera.getParameters(); 
     parameters.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(parameters); 
    } 

    public static void setFlashOff() 
    { 
     parameters = camera.getParameters(); 
     parameters.setFlashMode(Parameters.FLASH_MODE_OFF);  
     camera.setParameters(parameters); 
    } 
} 

नीचे मेरी एकता सी # कोड है,

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

public class testJar : MonoBehaviour 
{ 
    bool torchon; 
    AndroidJavaClass testClasslight; 

    void Start() 
    { 
     torchon = false; 
    } 

    void OnGUI() 
    { 
     string teststring = "empty"; 

     AndroidJavaClass testClass = new AndroidJavaClass("com.example.glassplaces.MainActivity"); 
     teststring = testClass.CallStatic<string>("dummyString"); 

     GUI.Label (new Rect (20, 20, 100, 60), teststring); 

     if(GUI.Button(new Rect (20, 100, 100, 60), "ON")) 
     { 
      torchon = true; 
     } 

     if(torchon == true) 
     { 
      GUI.Label(new Rect(200, 20,100,60), "torch ON"); 
      testClass.CallStatic<AndroidJavaObject>("setFlashOn"); 
     } 
    } 
} 

AndroidManifest.xml में कैमरे को एक्सेस करने के लिए जब जोड़ा अनुमतियाँ, एप्लिकेशन बिल्कुल शुरू नहीं करता है। प्रोजेक्ट से एक्सएमएल फ़ाइल को छोड़कर, "डमी स्ट्रिंग" विधि अभी भी स्ट्रिंग लौटाती है।

नीचे AndroidManifest.xml है,

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.newflash" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 

    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/app_icon" 
     android:label="@string/app_name"> 
     <activity 
      android:name="com.example.newflash.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

नीचे चेतावनी जो एकता ऊपर एक्सएमएल के साथ कंसोल में पता चलता बिल्ड & रन के दौरान शामिल,

Unable to find unity activity in manifest. You need to make sure orientation attribut is set to sensor manually. 
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() 

यह बहुत अच्छा होगा अगर किसी को मेरी मदद कर सकता है। किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

अग्रिम धन्यवाद!

+0

[कड़ी] (http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html) – jainam

उत्तर

1

स्टीवथॉर्न के उत्तर (एकता Answers पर) के लिए धन्यवाद, यह काम कर रहा है। मेरी जावा गतिविधि को "यूनिटीप्लेयर एक्टिविटी" में विस्तारित करने पर, मुझे यह काम मिल गया। यही है, com.unity3d.player.UnityPlayerActivity। Here यूनिटीप्लेयर एक्टिविटी के बारे में और जानकारी है।

2

मुझे 100% यकीन नहीं है कि कैफीनकोडर द्वारा उपरोक्त प्रतिक्रिया सटीक है। यूनिटीप्लेयर एक्टिविटी का विस्तार नहीं करना संभव है और मैंने इसे किया है। आपको अपनी खुद की गतिविधि के साथ अपने मनोविज्ञान में इन विशेष एकता गतिविधियों को निर्दिष्ट करने की आवश्यकता है।

एकता पहले यूनिटीप्लेयरप्रोक्सी एक्टिविटी शुरू करेगी और वहां से आगे बढ़ेगी। आपका जावा कोड केवल तब कॉल किया जाता है जब आप इसे कॉल/प्रारंभ करते हैं।

के बाद गतिविधियों में से कुछ आप निर्दिष्ट कर सकते हैं:

<activity 
    android:name="com.unity3d.player.UnityPlayerProxyActivity" 
    android:label="AngryBots Gamme" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:screenOrientation="landscape" 
> 

    <intent-filter> 
    <action android:name="android.intent.action.MAIN"/> 
    <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 

</activity> 

<activity 
    android:name="com.unity3d.player.UnityPlayerActivity" 
    android:label="AngryBots Gamme" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:screenOrientation="landscape" 
/> 

<activity 
    android:name="com.unity3d.player.UnityPlayerNativeActivity" 
    android:label="AngryBots Gamme" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:screenOrientation="landscape" 
/> 
+0

तुम ठीक कह रहे है, यह भी है गतिविधि का विस्तार नहीं करना संभव है और अभी भी यह काम कर रहा है। मेरी गलती! मैंने अपना जवाब संपादित कर लिया है। इसका जिक्र करने के लिए धन्यवाद। – jainam

संबंधित मुद्दे