Ich brauchte einige Zeit, um das herauszufinden. Alle online gefundenen Lösungen waren nur teilweise vollständig. Im Folgenden finden Sie die vollständige Lösung zum Starten einer Unity-Anwendung von einer anderen Android-Anwendung mit einer benutzerdefinierten impliziten Absicht und darüber hinaus, wie Sie auf die zusätzlichen Daten zugreifen können, die mit der Absicht in Unity gesendet wurden.
Um dies zu erreichen, müssen Sie ein Android-Plugin erstellen, das von Unity für den Zugriff auf zusätzliche Daten verwendet wird.
ANDROID PLUGIN:
Sie müssen die classes.jar von Unity Installationsordner auf den Android Plugin-Ordner /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
kopieren
Wichtig hier ist der Paketname verwendet: 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 bauen Datei:
Folgendes der App gradle Build-Datei hinzufügen Lage sein, eine .jar zu schaffen, mit 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)
Kopieren Sie die erstellte AndroidPlugin.jar zur Einheit Assets verwendet werden/Plugins/Android
UNITY APP:
die Bündel-Kennung im Player Set Einstellungen die gleiche wie Set im Android Plugin sein - com.company.plugin
Erstellen von benutzerdefiniertem AndroidManifest.xml Datei in Assets/Plugins/Android
hier Wichtig ist die gleichen Paketnamen in dem verwendeten zu verwenden Plugin. Beachten Sie auch den Intent-Namen: com.company.plugin.do
AndroidManifest.XML
Erstellen Sie ein Unity-Skript mit dem Namen AccessManager, und hängen Sie das Skript an ein Spielobjekt in der Szene an. OnAccessToken ist die Methode, die die vom Android-Plugin gesendete Nachricht empfängt und die zusätzlichen Daten enthält, die von der Absicht gesendet werden.
public class accessManager : MonoBehaviour {
public void OnAccessToken(string accessToken)
{
Debug.Log("Message Received!!!! :" + accessToken);
}
}
ANDROID APP:
Erstellen Sie eine Standard-Android-Anwendung, die die Unity Application starten wird und die Absicht zusätzliche Daten
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, Danke für die kurze Erklärung. Ich habe die ganze Prozedur verfolgt. Native App startet die Unity App, kann die Nachricht jedoch nicht abrufen. Und was könnte ich falsch machen? –