Quais são os passos para criar um método de entrada personalizado no Android?
The method getBaseContext() is only relevant when you have a ContextWrapper.
Android provides a ContextWrapper class that is created around an existing Context using:
- ContextWrapper wrapper = new ContextWrapper(context);
The benefit of using a ContextWrapper is that it lets you “modify behavior without changing the original Context”. For example, if you have an activity called myActivity then can create a View with a different theme than myActivity:
- ContextWrapper customTheme = new ContextWrapper(myActivity) {
- @Override
- public Resources.Theme getTheme() {
- return someTheme;
- }
- }
- View myView = new MyView(customTheme);
ContextWrapper is really powerful because it lets you override most functions provided by Context including code to access resources (e.g. openFileInput(), getString()), interagir com outros componentes (ex. sendBroadcast(), registerReceiver()), solicitar permissões (ex. checkCallingOrSelfPermission()) e resolver localizações do sistema de arquivos (ex. getFilesDir()). ContextWrapper é realmente útil para trabalhar com problemas específicos de dispositivos/versão ou para aplicar customizações únicas a componentes como Views que requerem um contexto.
O método getBaseContext() pode ser usado para acessar o Contexto "base" que o ContextWrapper envolve. You might need to access the “base” context if you need to, for example, check whether it’s a Service, Activity or Application:
- public class CustomToast {
- public void makeText(Context context, int resId, int duration) {
- while (context instanceof ContextWrapper) {
- context = context.baseContext();
- }
- if (context instanceof Service)) {
- throw new RuntimeException("Cannot call this from a service");
- }
- ...
- }
- }
Or if you need to call the “unwrapped” version of a method:
- class MyCustomWrapper extends ContextWrapper {
- @Override
- public Drawable getWallpaper() {
- if (BuildInfo.DEBUG) {
- return debugBackground;
- } else {
- return getBaseContext().getWallpaper();
- }
- }
- }
Artigos semelhantes
- Como vai a Caixa de Entrada do Google? A Caixa de Entrada e o Gmail estão a ficar fortes ou a Caixa de Entrada do Google está estagnada?
- Qual é o melhor aplicativo de método de entrada na plataforma móvel como iOS e Android? Por quê?
- Haverá algum dia um método melhor para preservar os videojogos do que a emulação? Este método poderia ser legal?
- Como um método principal é chamado em outra classe de método principal em Java?