2016-03-19 17 views
7

Tôi đang khởi chạy ứng dụng Unity từ một ứng dụng Android khác bằng cách sử dụng mục đích ngầm định tùy chỉnh. Điều này làm việc tốt, nhưng tôi không thể tìm ra cách để đọc dữ liệu thêm ý định trong Unity?Đọc dữ liệu bổ sung của Android về khởi chạy ứng dụng Unity

Ý ĐỊNH ANDROID TRIỂN KHAI UNITY APP

i=new Intent(); 
i.setAction("com.company.unityapp.MyMethod"); 
i.putExtra("KEY","This is the message string"); 
startActivity(i); 

UNITY APP AndroidManifest.xml

<intent-filter> 
    <action android:name="com.company.unityapp.MyMethod" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

Tôi có một GameObject trong cảnh của tôi với một kịch bản đính kèm. Bên trong phương pháp bắt đầu, tôi có mã này để thử và đọc dữ liệu bổ sung đã được chuyển cùng với mục đích

AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 

AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent"); 
bool hasExtra = intent.Call<bool> ("hasExtra", "arguments"); 

if (hasExtra) { 
AndroidJavaObject extras = intent.Call<AndroidJavaObject> ("getExtras"); 
arguments = extras.Call<string> ("getString", "arguments"); 
} 

Điều này không hoạt động và đối số luôn trống. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

9

Tôi mất khá nhiều thời gian để tìm hiểu điều này. Tất cả các giải pháp tìm thấy trực tuyến chỉ được hoàn thành một phần. Dưới đây là giải pháp đầy đủ để khởi chạy ứng dụng Unity từ một ứng dụng Android khác bằng cách sử dụng mục đích ngầm định tùy chỉnh và cũng như cách truy cập dữ liệu bổ sung được gửi với mục đích bên trong Unity.

Để thực hiện việc này, bạn cần phải tạo một plugin Android sẽ được Unity sử dụng để truy cập dữ liệu bổ sung dự định.

PLUGIN ANDROID:


Bạn cần phải sao chép classes.jar từ thư mục cài đặt Unity vào thư mục Plugin android /lib/classes.jar

public class MainActivity extends UnityPlayerActivity { 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     handleNewIntent(intent); 
    } 

    private void handleNewIntent(Intent intent){ 
     String text = intent.getStringExtra("KEY"); 
     UnityPlayer.UnitySendMessage("AccessManager","OnAccessToken", text); 
    } 
} 

AndroidManifest.xml

Quan trọng ở đây là tên gói được sử dụng: com.company.plugin

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.plugin"> 
    <application 
     android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" 
     android:supportsRtl="true" android:theme="@style/AppTheme"> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Gradle xây dựng file:

Thêm dòng sau vào ứng dụng gradle xây dựng tập tin để có thể tạo ra một .jar để được sử dụng với Unity

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 
    sourceSets { 
     main { 
      java { 
       srcDir 'src/main/java' 
      } 
     } 
    }  
... 
... 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.2.1' 
    compile 'com.android.support:design:23.2.1' 
    compile files('libs/classes.jar') 
} 

//task to delete the old jar 
task deleteOldJar(type: Delete) { 
    delete 'release/AndroidPlugin.jar' 
} 

//task to export contents as jar 
task exportJar(type: Copy) { 
    from('build/intermediates/bundles/release/') 
    into('release/') 
    include('classes.jar') 
    ///Rename the jar 
    rename('classes.jar', 'AndroidPlugin.jar') 
} 

exportJar.dependsOn(deleteOldJar, build) 

Sao chép tạo AndroidPlugin.jar để Unity Tài sản/Plugins/Android

UNITY APP:


Đặt nhận dạng theo gói tại Thủ Settings để được giống như bộ trong Android Plugin - com.company.plugin

Tạo tập tin tùy chỉnh AndroidManifest.xml trong Assets/Plugins/Android

Quan trọng ở đây là sử dụng tên gói tương tự như được sử dụng trong cắm vào. Cũng lưu ý tên mục đích: com.company.plugin.do

AndroidManifest.XML

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.plugin" 
     android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="9" /> 
    <application android:label="@string/app_name"> 
     <activity android:name=".MainActivity" android:label="@string/app_name" 
      android:launchMode="singleTask" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="sensor"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="com.company.plugin.do" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="text/plain"/> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Tạo tập lệnh thống nhất có tên AccessManager và đính kèm tập lệnh vào đối tượng trò chơi trong cảnh. OnAccessToken là phương thức sẽ nhận được tin nhắn được gửi từ plugin android và sẽ chứa thêm dữ liệu được gửi từ mục đích.

public class accessManager : MonoBehaviour { 

    public void OnAccessToken(string accessToken) 
    { 
     Debug.Log("Message Received!!!! :" + accessToken); 
    } 
} 

ANDROID APP:

Tạo một ứng dụng tiêu chuẩn của Android sẽ ra mắt ứng dụng Unity và gửi thêm dữ liệu ý định

public void LaunchUnityApp(){ 
    Intent i=new Intent(); 
    i.setAction("com.company.plugin.do"); 
    i.setType("text/plain"); 
    i.putExtra("KEY","This is the text message sent from Android"); 
    startActivity(i); 
} 
+0

Hey Hardy, Cảm ơn bạn đã giải thích ngắn gọn. Tôi làm theo toàn bộ quy trình. Native App khởi chạy ứng dụng Unity nhưng không thể nhận được tin nhắn. Và ý tưởng những gì tôi có thể làm sai? –

Các vấn đề liên quan