Ich versuche, einen Dienst in einem Unity3d Android-Plugin zu starten, kann aber nicht funktionieren. Arbeitet an der Android Studio-Test-App, aber der Dienstanruf schlägt innerhalb der Einheit fehl.Unity3D Android plugin ,: Service kann nicht gestartet werden, Absicht Fehler
Meine Serviceklasse
public class ProximityService extends Service {
private String TAG = "iProximity: ";
NotificationManager _NotificationManager;
private Context _Context;
private static Timer _Timer = new Timer();
public ProximityService() {
}
private void sendNotification() {
Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder builder;
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, iRealUnityPlayerActivity.class), 0);
builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ireal)
.setContentTitle("Notification")
.setContentText("message")
.setTicker("msg: mensaje")
.setSound(sound)
.setAutoCancel(true);
builder.setContentIntent(contentIntent);
_NotificationManager.notify(0, builder.build());
}
@Override
public void onCreate() {
Log.i(TAG, "onCreate()");
super.onCreate();
_Context = getApplicationContext();
_NotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
// methods
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommanf()");
//startProximity();
sendNotification();
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind()");
// TODO: Return the communication channel to the service.
return null;
}
}
Java-Klasse, die den Dienst starten verwendet wird:
public final class StatusCheckStarter {
static Context myContext;
// Called From C# to get the Context Instance
public static void ReceiveContextInstance(Context tempContext) {
myContext = tempContext;
}
public static String StartProximityService()
{
String result = "OK";
try
{
myContext.startService(new Intent(myContext, ProximityService.class));
}
catch (Exception e) {
e.printStackTrace();
result = e.getMessage();
}
return result;
}
public static String Dummy() {
return "DONEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE";
}
}
# -Code Unity C, die die Java-Funktionen verwendet wird, riefen den Dienst zu starten:
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaObject unityContext;
AndroidJavaClass customClass;
string a1 = "";
string a2 = "";
string a3 = "";
string a4 = "";
void Start() {
//Replace with your full package name
sendActivityReference("info.ireal.proximitylib.StatusCheckStarter");
//Now, start service
startService();
Debug.Log ("START");
}
void sendActivityReference(string packageName)
{
unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
customClass = new AndroidJavaClass(packageName);
customClass.CallStatic("ReceiveContextInstance", unityContext);
}
void startService()
{
a4 = customClass.CallStatic<string> ("Dummy");
a3 = customClass.CallStatic<string>("StartProximityService");
}
Die Dummy-Methode funktioniert und gibt einen Zeichenfolgenwert zurück, aber der Dienst funktioniert nicht
Adb logcat Nachricht:
Dienst kann nicht Intent { cmp = info.ireal.proximitytest/info.ireal.proximitylib.ProximityService VirtualScreenParam = Param {mDisplayId = -1, null, Mflags = starten 0x00000000)}} U = 0: nicht gefunden
ich schätze jede Hilfe Mit freundlichen Grüßen
Mariano
Ich verwende die Lösung von diesem thread, aber kann es immer noch nicht funktionieren.
EDIT
Mein AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<application
android:theme="@style/UnityThemeSelector"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:debuggable="true">
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<service android:name="info.ireal.proximitylib.ProximityService" />
<!---<service android:name="ProximityService" />-->
</application>
</manifest>
Hallo Programmierer, vielen Dank für Ihre Antwort, ich folge uns Ihre Tipps und immer noch gleichen Fehler, werde ich meine Post AndroidManifest.xml, Im noch noob in Android-Programmierung, die mit Plugin-Abhängigkeit verwandt werden könnte? – on4ir4m
Die Bibliothek proximitylib zeigt abhängig von com.android.support:appcompat-v7:24.0.0, sollte ich dies in Plugin-Verzeichnis aufnehmen? – on4ir4m
Nein, solltest du nicht. Ich glaube nicht, dass das das Problem ist. Ich habe dir eine Frage unter deiner Frage gestellt. Überprüfen Sie diese Frage und beantworten Sie sie hier. – Programmer