Locale not changing in signed apk












0














I have an android app which contains of 4 languages,i.e. English, Hindi, Gujrati and Marathi.
I have 4 strings file in my res folder and when I run the code in debug mode directly to my device it works great. But when i sign the apk and post it on playstore and try to download that it doesn't work.



This is my code for setting the locale :



public class BaseActivity extends AppCompatActivity {
public SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String lang = sharedpreferences.getString("lang","en");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : "+lang);

Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}


I extend this BaseActivity to all activities I use.
So I am not able to figure out the issue why it is working fine in debug and not in the signed apk.










share|improve this question
























  • use getApplicationContext() instead of getBaseContext()
    – nimi0112
    Nov 23 at 7:20










  • have a look at this proandroiddev.com/…
    – AWAiS SOOMrO
    Nov 23 at 7:25


















0














I have an android app which contains of 4 languages,i.e. English, Hindi, Gujrati and Marathi.
I have 4 strings file in my res folder and when I run the code in debug mode directly to my device it works great. But when i sign the apk and post it on playstore and try to download that it doesn't work.



This is my code for setting the locale :



public class BaseActivity extends AppCompatActivity {
public SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String lang = sharedpreferences.getString("lang","en");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : "+lang);

Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}


I extend this BaseActivity to all activities I use.
So I am not able to figure out the issue why it is working fine in debug and not in the signed apk.










share|improve this question
























  • use getApplicationContext() instead of getBaseContext()
    – nimi0112
    Nov 23 at 7:20










  • have a look at this proandroiddev.com/…
    – AWAiS SOOMrO
    Nov 23 at 7:25
















0












0








0







I have an android app which contains of 4 languages,i.e. English, Hindi, Gujrati and Marathi.
I have 4 strings file in my res folder and when I run the code in debug mode directly to my device it works great. But when i sign the apk and post it on playstore and try to download that it doesn't work.



This is my code for setting the locale :



public class BaseActivity extends AppCompatActivity {
public SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String lang = sharedpreferences.getString("lang","en");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : "+lang);

Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}


I extend this BaseActivity to all activities I use.
So I am not able to figure out the issue why it is working fine in debug and not in the signed apk.










share|improve this question















I have an android app which contains of 4 languages,i.e. English, Hindi, Gujrati and Marathi.
I have 4 strings file in my res folder and when I run the code in debug mode directly to my device it works great. But when i sign the apk and post it on playstore and try to download that it doesn't work.



This is my code for setting the locale :



public class BaseActivity extends AppCompatActivity {
public SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String lang = sharedpreferences.getString("lang","en");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : "+lang);

Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}


I extend this BaseActivity to all activities I use.
So I am not able to figure out the issue why it is working fine in debug and not in the signed apk.







android locale






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 at 7:12









koksalb

355613




355613










asked Nov 22 at 20:24









Parth Anjaria

2,09421636




2,09421636












  • use getApplicationContext() instead of getBaseContext()
    – nimi0112
    Nov 23 at 7:20










  • have a look at this proandroiddev.com/…
    – AWAiS SOOMrO
    Nov 23 at 7:25




















  • use getApplicationContext() instead of getBaseContext()
    – nimi0112
    Nov 23 at 7:20










  • have a look at this proandroiddev.com/…
    – AWAiS SOOMrO
    Nov 23 at 7:25


















use getApplicationContext() instead of getBaseContext()
– nimi0112
Nov 23 at 7:20




use getApplicationContext() instead of getBaseContext()
– nimi0112
Nov 23 at 7:20












have a look at this proandroiddev.com/…
– AWAiS SOOMrO
Nov 23 at 7:25






have a look at this proandroiddev.com/…
– AWAiS SOOMrO
Nov 23 at 7:25














1 Answer
1






active

oldest

votes


















1














Use



 getApplicationContext().getResources().updateConfiguration(config,
getApplicationContext().getResources().getDisplayMetrics());


instead of



 getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());




Because




getApplicationContext() - Returns the context for all activities
running in application.




and




getBaseContext() - If you want to access Context from another context
within application you can access.







share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53437629%2flocale-not-changing-in-signed-apk%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    Use



     getApplicationContext().getResources().updateConfiguration(config,
    getApplicationContext().getResources().getDisplayMetrics());


    instead of



     getBaseContext().getResources().updateConfiguration(config,
    getBaseContext().getResources().getDisplayMetrics());




    Because




    getApplicationContext() - Returns the context for all activities
    running in application.




    and




    getBaseContext() - If you want to access Context from another context
    within application you can access.







    share|improve this answer


























      1














      Use



       getApplicationContext().getResources().updateConfiguration(config,
      getApplicationContext().getResources().getDisplayMetrics());


      instead of



       getBaseContext().getResources().updateConfiguration(config,
      getBaseContext().getResources().getDisplayMetrics());




      Because




      getApplicationContext() - Returns the context for all activities
      running in application.




      and




      getBaseContext() - If you want to access Context from another context
      within application you can access.







      share|improve this answer
























        1












        1








        1






        Use



         getApplicationContext().getResources().updateConfiguration(config,
        getApplicationContext().getResources().getDisplayMetrics());


        instead of



         getBaseContext().getResources().updateConfiguration(config,
        getBaseContext().getResources().getDisplayMetrics());




        Because




        getApplicationContext() - Returns the context for all activities
        running in application.




        and




        getBaseContext() - If you want to access Context from another context
        within application you can access.







        share|improve this answer












        Use



         getApplicationContext().getResources().updateConfiguration(config,
        getApplicationContext().getResources().getDisplayMetrics());


        instead of



         getBaseContext().getResources().updateConfiguration(config,
        getBaseContext().getResources().getDisplayMetrics());




        Because




        getApplicationContext() - Returns the context for all activities
        running in application.




        and




        getBaseContext() - If you want to access Context from another context
        within application you can access.








        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 23 at 7:26









        nimi0112

        8761622




        8761622






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53437629%2flocale-not-changing-in-signed-apk%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)