Adgang android kontekst i ndk ansøgning

cppdev 12/15/2010. 2 answers, 7.899 views
android android android-ndk android-ndk

Er der nogen måde, hvorpå jeg kan videregive / få et objekt af android sammenhæng i min ndk applikation. Jeg vil bruge SharedPreferences i min ndk applikation via jni interface. For at få en forekomst af SharedPreferences objekt, skal jeg ringe getSharedPreferences()Context . Men jeg har ikke adgang til kontekstobjektet.

ELLER

Hvordan kan jeg læse og skrive en xml-fil fra NDK?

Enhver pointer vil blive værdsat.

3 Comments
ognian 12/15/2010
Sådan læses og skrives xml-fil: xmlsoft.org
Sebastian Roth 12/15/2010
Selvom jeg ikke har nogen erfaring med NDK, tror jeg ikke, du kan få adgang til konteksten. NDK-udvikling er kun for tidskritiske, højtydende og kun lavtliggende ting. Jeg foreslår, at du finder de mest kritiske konfigurationsdata, du har brug for, og skriv det ud i enten JSON eller XML, og analysér det fra din NDK-kode.
Mr.Cool 05/22/2013
@cppdev Nu står jeg også over for det samme problem, hvis du har implementeret dette, kan du dele

2 Answers


Lucas S. 12/22/2010.

Der er ikke noget særligt, du skal gøre, det er ligesom almindelig JNI-mekanisme. Du skal have en pointer til kontekstobjektet, og hent derefter metoden ID, du vil ringe til, og derefter påberåbe det med de args, du vil have.

Selvfølgelig i ord det lyder super ligetil, men i kode bliver det virkelig rodet siden alle de kontroller og JNI kalder.

Så efter min mening vil jeg ikke forsøge at gennemføre hele sagen fra indfødte / JNI-kode, men jeg vil i stedet implementere en hjælpermetode i Java, der gør alle de ting og bare modtager de nødvendige data til at læse / skrive præferencen.

Det vil forenkle din oprindelige kode meget, og det vil gøre det lettere at vedligeholde.

f.eks:

//Somewhere inside a function in your native code
void Java_com_example_native_MainActivity_nativeFunction(JNIEnv* env, jobject thiz)
{
    jclass cls = (*env)->FindClass(env,"PreferenceHelper");
    if (cls == 0) printf("Sorry, I can't find the class");

    jmethodID set_preference_method_id;

    if(cls != NULL)
    {
        set_preference_method_id = (*env)->GetStaticMethodID(env, cls, "setPreference", "(Ljava/lang/String;Ljava/lang/StringV");

        if(set_preference_method_id != NULL )
        {
            jstring preference_name = (*env)->NewStringUTF(env, "some_preference_name");
            jstring value = (*env)->NewStringUTF(env, "value_for_preference");

            (*env)->CallStaticVoidMethod(env, cls, get_main_id, preference_name, value);
        }
    }
} 

Bemærk, at jeg lige skrev koden fra hukommelsen, så forvent ikke at træne ud af boksen.

2 comments
Igor Ganapolsky 04/12/2016
Hvad er env variabel? Er der en kontekst, der skal bestås i Android?
1 aasu 09/08/2016
@IgorGanapolsky Det behøver ikke udtrykkeligt at bestå som et argument i JNI-funktionen, fordi JVM internt passerer det. Se en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_work s

dev 02/16/2016.

Det ser ud som om ting har ændret sig for nylig, og løsningen ovenfor og få andre, der blev bogført på andre SO-indlæg, fungerede ikke for mig. Efter få forsøg var jeg i stand til at gøre følgende løsning arbejde. Mit mål var at sende Context Object til JNI og få den absolutte lagringssti.

void Java_com_path_to_my_class_jniInit(JNIEnv* env, jobject thiz, jobject contextObject) {

    try {
         //Get Context Class descriptor
         jclass contextClass = env->FindClass("android/content/Context");
         //Get methodId from Context class
         jmethodID getFilesDirMethodId = env->GetMethodID(contextClass,"getFilesDir","()Ljava/io/File;");

         //Call method on Context object which is passed in
         jobject fileObject = env->CallObjectMethod(contextObject,getFilesDirMethodId);

         //Get File class descriptor
         jclass fileClass = env->FindClass("java/io/File");
         //Get handle to the method that is to be called
         jmethodID absolutePathMethodId = env->GetMethodID(fileClass,"getAbsolutePath","()Ljava/lang/String;");
         //Call the method using fileObject
         jstring stringObject = (jstring)env->CallObjectMethod(fileObject,absolutePathMethodId);
      }
      catch(exception& ex){
            JNIExceptionHelper::throwException(env, ex.what());
            return;
      }
} 
1 comments
Igor Ganapolsky 04/12/2016
Jeg troede, at argumenter går i den sidste position i parameterlisten for GetMethodID ifølge journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementin g / .... Men passerer du contextClass som den første parameter?

HighResolutionMusic.com - Download Hi-Res Songs

1 The Chainsmokers

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
2 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
3 Anne-Marie

Rewrite The Stars flac

Anne-Marie. 2018. Writer: Benj Pasek;Justin Paul.
4 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
8 Nicki Minaj

No Candle No Light flac

Nicki Minaj. 2018. Writer: Denisia “Blu June” Andrews;Kathryn Ostenberg;Brittany "Chi" Coney;Brian Lee;TJ Routon;Tushar Apte;ZAYN;Nicki Minaj.
9 Brooks

Limbo flac

Brooks. 2018.
10 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
11 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
12 Rita Ora

Velvet Rope flac

Rita Ora. 2018.
13 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
14 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
15 Billie Eilish

When The Party's Over flac

Billie Eilish. 2018. Writer: Billie Eilish;FINNEAS.
16 K-391

Mystery flac

K-391. 2018.
17 Cher Lloyd

None Of My Business flac

Cher Lloyd. 2018. Writer: ​iamBADDLUCK;Alexsej Vlasenko;Kate Morgan;Henrik Meinke;Jonas Kalisch;Jeremy Chacon.
18 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
19 Lil Pump

Arms Around You flac

Lil Pump. 2018. Writer: Rio Santana;Lil Pump;Edgar Barrera;Mally Mall;Jon Fx;Skrillex;Maluma;Swae Lee;XXXTENTACION.
20 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.

Related questions

Hot questions

Language

Popular Tags