Форум программистов, компьютерный форум CyberForum.ru

NDK и SDK - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Скрытие/возврат activity по определенному событию http://www.cyberforum.ru/android-dev/thread810091.html
Всем привет! Подскажите, пожалуйста, как реализовать следующий функционал: 1) Запускается мое приложение, которое по Bluetooth принимает посылки 2) После этого необходимо как-то скрыть мое активити и работать с другими приложениями (но мое приложение все также продолжает принимать посылки, в фоне) 3) По приходу на блютус определенной посылки необходимо, чтобы моя активность...
Android Cursor c = db.rawQuery - выдает ошибку Есть таблица с датами, и есть SQL условие для получения даты. Если я в условие указываю дату которая есть в таблице код отрабатывает без ошибок и я получаю дату. Но если указываю дату которой нет в таблице приложение аварийно завершается! Почему так происходит где ошибка. Вообще я ожидал nuul или пусто. Если данный SQL запрос выполнить в Менеджере SQLite: получаю пусто если даты нет или дату если... http://www.cyberforum.ru/android-dev/thread810059.html
Android Yandex MapKit - Показ текста .setText() у нескольких балунов
У BalloonItem есть свойство setText этот текст показывается при клике на балун Как можно сделать так, чтобы этот текст всегда отображался? Как сделать чтобы этот текст отображался у нескольких балунов на карте?
Добавление события в календарь в прошивки, начиная с 4.0 Android
МУжчины, если кто работал с календарем, киньте, пожалуйста, исходник с добавлением события. Программа вроде отрабатывает, а событие не добавляется в календарь. Работает только способ, когда пользователь даст подтверждение на добавление и включен обмен данными. А мне надо, чтоб он без синхронизации с гуглом и без подтверждения добалял события в фоновом режиме. Добавлено через 5 часов 43 минуты...
Android CheckBox обработка события нажатия http://www.cyberforum.ru/android-dev/thread809276.html
Проблема в следующем. Есть своего рода каталог картинок возле которой стоит checkbox. Человек нажимает на него, в базу записывается номер картинки и статус галочки. Когда человек нажал отработалось событие check_bookmark.setOnCheckedChangeListener(new OnCheckedChangeListener() { записало данные. Теперь когда человек заново просматривает каталог картинок, галочки автоматически...
Android Поворот ViewPager Как повернуть ViewPager на 90 градусов при заблокированной портретной ориентации? Применяю RotateAnimation, но анимация не срабатывает до конца и ViewPager отображается то горизонтально, то вертикально. Еще он смещается. Подскажите как это исправить или как повернуть ViewPager по-другому. RotateAnimation animation = new RotateAnimation(to, to, Animation.RELATIVE_TO_SELF, 0.5f,... подробнее

Показать сообщение отдельно
EVP
319 / 241 / 43
Регистрация: 14.12.2010
Сообщений: 461
21.03.2013, 00:58     NDK и SDK
По NDK книжку выше порекомендовали уже. Используем jni:

1. Пишем классы в Java, например:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package evp.to.metrolog;
 
import java.util.ArrayList;
import java.util.List;
 
import android.util.Log;
 
public class NativeList<T> {
        static{
              System.loadLibrary("nativeList");
        }
 
    private long nativeList = 0;
    
    public NativeList()
    {
        nativeList = nativeCreate();
    }
    
    public int size()
    {
        return nativeSize(nativeList);
    }
    
    public T get(int index)
    {
        return nativeGet(nativeList, index);
    }
    
    public void set(int index, T value)
    {
        nativeSet(nativeList, index, value);
    }
    
    public void add(T value)
    {
        nativeAdd(nativeList, value);
    }
    
    public void remove(int index)
    {
        nativeRemove(nativeList, index);
    }
    
    public void clear()
    {
        nativeClear(nativeList);
    }
    
    @Override
    protected void finalize() throws Throwable{
        nativeDestroy(nativeList);
        nativeList = 0;
        super.finalize();
    }
 
    protected native static long nativeCreate();
    protected native static void nativeDestroy(long nativeList);
    protected native static int nativeSize(long nativeList);
    protected native static <T> T nativeGet(long nativeList, int index);
    protected native static <T> void nativeSet(long nativeList, int index, T value);
    protected native static <T> void nativeAdd(long nativeList, T value);
    protected native static void nativeRemove(long nativeList, int index);
    protected native static void nativeClear(long nativeList);
    
    protected static void check(NativeList<Position> nposs, List<Position> jposs)
    {
        if (nposs.size() != jposs.size())
            throw new RuntimeException("nposs.size() != jposs.size():" + nposs.size() + "." + jposs.size());
        int size = jposs.size();
        for(int i = 0; i < size; i++)
        {
            if (nposs.get(i) != jposs.get(i))
                throw new RuntimeException("nposs.get(i) != jposs.get(i)");
        }
    }
    
    public static void runTest()
    {
        Log.d("NativeList", "NativeList test start...");
        NativeList<Position> nposs = new NativeList<Position>();
        int size = 10;
        List<Position> jposs = new ArrayList<Position>(size);
        for(int i = 0; i < size; i++)
        {
            Position pos = new Position(i,i*10);
            jposs.add(pos);
            nposs.add(pos);
            check(nposs,jposs);
        }
        
        for(int i = 0; i < size; i+=3)
        {
            jposs.remove(i);
            nposs.remove(i);
            check(nposs,jposs);
            --size;
        }
        
        size = jposs.size();
        for(int i = 0; i < size; i++)
        {
            Position pos = new Position(i*10, i);
            jposs.set(i, pos);
            nposs.set(i, pos);
            check(nposs,jposs);
        }
        
        jposs.clear();
        nposs.clear();
        check(nposs,jposs);
        
        boolean exceptionFound = false; 
        try{
            nposs.get(0);
        }
        catch(RuntimeException ex)
        {
            Log.d("NativeList", "Exception: " + ex.getMessage());
            exceptionFound = true;
        }
        if (!exceptionFound)
            throw new RuntimeException("NativeList not safe.");
        
        Log.d("NativeList", "NativeList all tests done.");
    }
}


2. Натравливаем на него javah: javah -classpath FullPathToProject\bin\classes\ -bootclasspath "FullPathToAndroidSDK\platforms\android-8\android.jar" -d . evp.to.metrolog.NativeList
Получаем заголовок:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class evp_to_metrolog_NativeList */
 
#ifndef _Included_evp_to_metrolog_NativeList
#define _Included_evp_to_metrolog_NativeList
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeCreate
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_evp_to_metrolog_NativeList_nativeCreate
  (JNIEnv *, jclass);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeDestroy
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_evp_to_metrolog_NativeList_nativeDestroy
  (JNIEnv *, jclass, jlong);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeSize
 * Signature: (J)I
 */
JNIEXPORT jint JNICALL Java_evp_to_metrolog_NativeList_nativeSize
  (JNIEnv *, jclass, jlong);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeGet
 * Signature: (JI)Ljava/lang/Object;
 */
JNIEXPORT jobject JNICALL Java_evp_to_metrolog_NativeList_nativeGet
  (JNIEnv *, jclass, jlong, jint);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeSet
 * Signature: (JILjava/lang/Object;)V
 */
JNIEXPORT void JNICALL Java_evp_to_metrolog_NativeList_nativeSet
  (JNIEnv *, jclass, jlong, jint, jobject);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeAdd
 * Signature: (JLjava/lang/Object;)V
 */
JNIEXPORT void JNICALL Java_evp_to_metrolog_NativeList_nativeAdd
  (JNIEnv *, jclass, jlong, jobject);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeRemove
 * Signature: (JI)V
 */
JNIEXPORT void JNICALL Java_evp_to_metrolog_NativeList_nativeRemove
  (JNIEnv *, jclass, jlong, jint);
 
/*
 * Class:     evp_to_metrolog_NativeList
 * Method:    nativeClear
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_evp_to_metrolog_NativeList_nativeClear
  (JNIEnv *, jclass, jlong);
 
#ifdef __cplusplus
}
#endif
#endif


3. Конвертируем в C++ проект и собираем nativeList.so в котором nativeList.cpp:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "evp_to_metrolog_NativeList.h"
 
#include <vector>
 
typedef std::vector<jobject> NativeList;
 
void makeGlobalRef(JNIEnv *pEnv, jobject& obj, bool deleteLocalRef = true)
{
    if (obj != nullptr)
    {
        jobject gp = pEnv->NewGlobalRef(obj);
        if (deleteLocalRef)
            pEnv->DeleteLocalRef(obj);
        obj = gp;
    }
}
 
void deleteGlobalRef(JNIEnv *pEnv, jobject& obj)
{
    if (obj != nullptr)
    {
        pEnv->DeleteGlobalRef(obj);
        obj = nullptr;
    }
}
 
void clear(JNIEnv *pEnv, NativeList* list)
{
    for(auto iter = list->begin(); iter != list->end(); ++iter)
    {
        deleteGlobalRef(pEnv, *iter);
    }
    list->clear();
}
 
void throwRuntimeException(JNIEnv *pEnv, const char* message)
{
    jclass clazz = pEnv->FindClass("java/lang/RuntimeException");
    if (clazz != nullptr)
    {
        pEnv->ThrowNew(clazz, message);
    }
    pEnv->DeleteLocalRef(clazz);
}
 
jlong JNICALL Java_evp_to_metrolog_NativeList_nativeCreate
  (JNIEnv *, jclass)
{
    return (long)(void*)new NativeList();
}
 
void JNICALL Java_evp_to_metrolog_NativeList_nativeDestroy
  (JNIEnv* pEnv, jclass, jlong _ptr)
{
    NativeList* nl = (NativeList*)_ptr;
    clear(pEnv, nl);
    delete nl;
}
 
jint JNICALL Java_evp_to_metrolog_NativeList_nativeSize
  (JNIEnv*, jclass, jlong _ptr)
{
    NativeList* nl = (NativeList*)_ptr;
    return (int)nl->size();
}
 
jobject JNICALL Java_evp_to_metrolog_NativeList_nativeGet
  (JNIEnv *pEnv, jclass, jlong _ptr, jint index)
{
    NativeList* nl = (NativeList*)_ptr;
    if (index < 0 || index >= nl->size())
    {
        throwRuntimeException(pEnv, "Invalid index.");
        return nullptr;
    }
    return (*nl)[index];
}
 
void JNICALL Java_evp_to_metrolog_NativeList_nativeSet
  (JNIEnv *pEnv, jclass, jlong _ptr, jint index, jobject _value)
{
    NativeList* nl = (NativeList*)_ptr;
    if (index < 0 || index >= nl->size())
    {
        throwRuntimeException(pEnv, "Invalid index.");
        return;
    }
    jobject& lv = (*nl)[index];
    deleteGlobalRef(pEnv, lv);
    lv = _value;
    makeGlobalRef(pEnv, lv, false);
}
 
void JNICALL Java_evp_to_metrolog_NativeList_nativeAdd
  (JNIEnv *pEnv, jclass, jlong _ptr, jobject _value)
{
    NativeList* nl = (NativeList*)_ptr;
    makeGlobalRef(pEnv, _value, false);
    nl->push_back(_value);
}
 
void JNICALL Java_evp_to_metrolog_NativeList_nativeRemove
  (JNIEnv * pEnv, jclass, jlong _ptr, jint index)
{
    NativeList* nl = (NativeList*)_ptr;
    if (index < 0 || index >= nl->size())
    {
        throwRuntimeException(pEnv, "Invalid index.");
        return;
    }
 
    NativeList::iterator iter = nl->begin() + index;
    jobject& lv = *iter;
    deleteGlobalRef(pEnv, lv);
    nl->erase(iter);
}
 
void JNICALL Java_evp_to_metrolog_NativeList_nativeClear
  (JNIEnv *pEnv, jclass, jlong _ptr)
{
    NativeList* nl = (NativeList*)_ptr;
    clear(pEnv, nl);
}


4. В Android.mk: LOCAL_CPPFLAGS += -std=c++0x -frtti -fexceptions

5. В Application.mk: APP_STL := gnustl_static

6. Запускаем NativeList.runTest();

PS: Книжку хотя бы пролистай
 
Текущее время: 06:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru