Android родной использование посылки

Я пробую посылку с нативным кодом:

#include <stdio.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include <binder/IBinder.h>
#include <binder/Binder.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>

using namespace android;

int main()
{
int32_t i = 123, j = 456;

Parcel data;
status_t t = data.writeInt32(j);
if(t == NO_ERROR)
printf("Status: %d\n", t);
else if(t == BAD_VALUE)
printf("Bad Value\n");

int32_t jj = 0;
t = data.readInt32(&jj);
printf("t: %d\n", t);
printf("ParcelTest: %d\n", jj);

return 0;
}

Чтобы скомпилировать этот код, необходимо исходное дерево Android. Поместите это в внешний / ParcelTest. И Android.mk является Вот. Бежать mmma external/ParcelTest Скомпилировать.

Выход программы:

generic_x86:/ # /system/bin/ParcelTest
Status: 0
t: -61
ParcelTest: 0

Status: 0 указывает, что стоимость записи в Посылку работает. Но чтение не делает. Итак, Parcel — это то, что если я читаю данные в порядке написания, я получаю правильный результат. Есть идеи, почему этот пример кода не работает?

1

Решение

Правильное использование ниже:

#include <stdio.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include <binder/IBinder.h>
#include <binder/Binder.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>

using namespace android;

int main()
{
int32_t i = 123, j = 456;

Parcel data;
status_t t = data.writeInt32(j);
if(t == NO_ERROR)
printf("Status: %d\n", t);
else if(t == BAD_VALUE)
printf("Bad Value\n");

int32_t jj = 0;
data.setDataPosition(0);
t = data.readInt32(&jj);
printf("t: %d\n", t);
printf("ParcelTest: %d\n", jj);

return 0;
}

Позиция чтения должна быть установлена ​​вручную.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]