Я работаю над проектом Android, и я наткнулся на небольшую проблему. Я сделал игру с мячом на странице обучения единства, и теперь я хочу отправить элементы управления из приложения Android. Это очень важно, я не хочу, чтобы игра перехватывала элементы управления. Я использовал этот учебник:ANDROID sendBroadcast для UNITY BroadcastReceiver не работает
http://jeanmeyblum.weebly.com/scripts--tutorials/communication-between-an-android-app-and-unity
Я сделал службу в приложении для Android, который я думаю, это вполне нормально. Я тестировал его, если он работает в отладчике, и это так. Затем я сделал приемник в соответствии с инструкцией, то же самое с частью плагина. Когда я запускаю игру (которая находится в действии в приложении Android), приемник работает ALMOST, он получает значение «text», которое я устанавливал в статической переменной, но только значение, которое было в объявлении в начале (так что я думаю, что часть плагина работает правильно). Проблема в том, что метод onReceive() не вызывается, поэтому значение «текст» не изменяется на «-1», которое перемещает шар в противоположном направлении (шар всегда перемещается в направлении +1).
Вот код:
public class MyReceiver extends BroadcastReceiver {
private static MyReceiver instance;
// text that will be read by Unity
public static String text = "1";
// Triggered when an Intent is catched
@Override
public void onReceive(Context context, Intent intent) {
// We get the data the Intent has
String sentIntent = intent.getStringExtra(Intent.EXTRA_TEXT);
//if (sentIntent != null) {
text = "-1";
//}
}
public static void createInstance()
{
if(instance == null)
{
instance = new MyReceiver();
}
}
}
И Услуги:
public class MyService extends Service {
private final Handler handler = new Handler();
private int numIntent = 0;
// It's the code we want our Handler to execute to send data
private Runnable sendData = new Runnable() {
// the specific method which will be executed by the handler
public void run() {
numIntent++;
// sendIntent is the object that will be broadcast outside our app
Intent sendIntent = new Intent();
// We add flags for example to work from background
sendIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_FROM_BACKGROUND|Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
// SetAction uses a string which is an important name as it identifies the sender of the intent and that we will give to the receiver to know what to listen.
// By convention, it's suggested to use the current package name
sendIntent.setAction("com.example.package");
// Here we fill the Intent with our data, here just a string with an incremented number in it.
sendIntent.putExtra(Intent.EXTRA_TEXT, "1000");
// And here it goes ! our message is send to any other app that want to listen to it.
sendBroadcast(sendIntent);
// In our case we run this method each second with postDelayed
handler.removeCallbacks(this);
handler.postDelayed(this, 1000);
}
};
// When service is started
public void onStart(Intent intent, int startid) {
// We first start the Handler
handler.removeCallbacks(sendData);
handler.postDelayed(sendData, 1000);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
Я также редактировал манифестах:
<service
android:name="com.example.MyService"
android:enabled="true" >
</service>
и приемник:
<receiver android:name="com.example.receiver.MyReceiver">
<intent-filter>
<action android:name="com.example.package">
</action>
</intent-filter>
</receiver>
Я могу видеть MyService в настройках телефонов, и игра получает объявленное значение «текст». Проблема заключается в методе onReceive i thin, который никогда не называется. Кто-нибудь может мне с этим помочь?
Я попытался зарегистрировать приемник в обоих файлах манифеста, т.е. в Unity и JAR. Но все равно не получилось вызвать onReceive(). :( Можете ли вы посоветовать мне более подробную информацию? – Nick
+1 для ответа и вопроса тоже .. hey thanx alot .. Это тоже работало для меня. Дело в том, что вам нужно зарегистрировать приемник, как с полным именем пакета в оба файла манифеста. <ресивер андроида: name = "com.test.app.PluginBroadcastReceiver"> Нравится это. – Nick