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