Android – Bloqueando a orientação de tela programaticamente

full_screen_android

Segue alguns métodos uteis para lidar com a orientação de tela programaticamente.

/**
 * Destravando orientação de tela
 *
 */
public static boolean releaseScreenOrientation(Activity activity) {
    return lockScreenOrientation(activity, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

/**
 * Travando orientação de tela na posição atual.
 *
 */
public static boolean lockCurrentScreenOrientation(Activity activity) {
    return lockScreenOrientation(activity, activity.getRequestedOrientation());
}

/**
 * Recebe como parametro: ActivityInfo.SCREEN_ORIENTATION_XXXXXX
 *
 * @param activity Activity
 * @param screenOrientation ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
 */
public static boolean lockScreenOrientation(Activity activity, int screenOrientation) {
    activity.setRequestedOrientation(screenOrientation);
    return true;
}

/**
 * Recebe como parametro: Surface.ROTATION_X
 *
 * @param activity Activity
 * @param screenRotation Surface.ROTATION_0 / 90 / 180 / 270
 */
public static boolean lockScreenRotation(Activity activity, int screenRotation) {
    if (screenRotation > -1) {
        int orientation = activity.getRequestedOrientation();
        switch (screenRotation) {
            case Surface.ROTATION_0:
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                break;
            case Surface.ROTATION_90:
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                break;
            case Surface.ROTATION_180:
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
                break;
            case Surface.ROTATION_270:
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
                break;
        }
        return lockScreenOrientation(activity, orientation);
    } else {
        return false;
    }
}

Android – Como reiniciar a aplicação programaticamente (How to ‘restart’ an android application programmatically)

Android reiniciar aplicativo

    public void backToMain(Bundle params) {
    	//Monta a intent para abrir a aplicação.
        Intent mStartActivity = new Intent(this, MainActivity.class);
        //Se quiser adicionar algum parametro para o inicio da aplicação:
        if (params != null) {
            mStartActivity.putExtras(params);
        }

        //Realiza o agendamento da intent de abrir o aplicativo:
        //No caso abaixo o aplicativo vai ser reaberto daqui 500ms (System.currentTimeMillis() + 500);
        PendingIntent mPendingIntent = PendingIntent.getActivity(this, 123456, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager mgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 500, mPendingIntent);

        //Mata todos processos associados a este aplicativo.
        android.os.Process.killProcess(android.os.Process.myPid());
        //Fecha o aplicativo.
        System.exit(1);
    }

Android – Como copiar um texto programaticamente (How to Copy Text to Clip Board in Android?)

ctrl-c

private void setClipboard(Context context,String text) {
    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
        android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        clipboard.setText(text);
    } else {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text);
        clipboard.setPrimaryClip(clip);
    }
}

Udacity – Cursos gratuitos Android

udacity

 

Udacity nasceu de uma experiência da Universidade de Stanford na qual Sebastian Thrun e Peter Norvig ofereceram seu curso “Introdução à Inteligência Artificial” on-line para qualquer pessoa, gratuitamente. Mais de 160 mil alunos em mais de 190 países se inscreveram e não muito mais tarde, a Udacity nasceu.

A Udacity está construindo uma universidade online, “feita pela Silicon Valley”, que:

  • ensine as habilidades que os empregadores da indústria precisam hoje
  • ofereça certificações aprovadas por empregadores
  • eduque com uma fração do custo de escolas tradicionais

Com gigantes da indústria – Google, AT&T, Facebook, Salesforce, Cloudera, etc.-oferece programas e certificações Nanodegree, projetados para que os profissionais se tornem desenvolvedores Web, analistas de dados, desenvolvedores mobile, etc. Seus alunos adquirirem competências reais através de uma série de cursos on-line e projetos hands-on.

Vejá alguns cursos GRATUITOS para desenvolvedores: Continue reading

Android, GitHub, Maven, JitPack – Disponibilizando uma biblioteca Android como dependência utilizando o GitHub + JitPack (publishing of android libraries)

android-github-logo

Para disponibilizar uma biblioteca com gerenciamento de dependência, normalmente os desenvolvedores publicam suas libs em repositórios utilizando o Maven como ferramenta de configuração. Porem esse processo é complicado e trabalhoso. O JitPack (https://jitpack.io/) trabalha em conjunto com o Maven, GitHub, Gradle e o Android Arsenal para facilitar essa configuração, tornando muito simples criar uma biblioteca android para ser utilizada como dependência em outros projetos.
Ele constrói projetos Git sob demanda e fornece-lhe com artefatos prontos para o uso (jar, AAR). Se você quer sua biblioteca para estar disponível para o mundo, não há necessidade de passar por compilação de projeto e upload. Tudo que você precisa fazer é empurrar o seu projeto para GitHub e JitPack vai cuidar do resto.

1 – Primeiro de tudo, seu projeto deve estar no GitHubContinue reading

Android – Salvar Logcat em arquivo (Save LogCat To A Text File)

logcat

O método abaixo é responsável por criar um arquivo de log na raiz do sdcard/ com a data do dia mais o appName passado por parametro. Após gerar o arquivo ele limpa o log do sistema, pois se chamado novamente ele escreve as novas informações no final do arquivo.

public class LogCat {
    private static final String LOG = "LogCat";

    public static File extractLogToFile(Context context, String appName) {
        //set a file
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
        String fullName = appName.toUpperCase() + "_" + df.format(new Date()) + ".log";
        File file = new File(Environment.getExternalStorageDirectory(), fullName);
        try {
            if (!file.exists()) file.createNewFile();

            String command = String.format("logcat -d -v threadtime " + context.getPackageName() + "*:*");
            Process process = Runtime.getRuntime().exec(command);

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder result = new StringBuilder();
            String currentLine = null;

            while ((currentLine = reader.readLine()) != null) {
                result.append(currentLine);
                result.append("\n");
            }

            FileWriter out = new FileWriter(file, true);
            out.append(result.toString());
            out.flush();
            out.close();

            //clear the log
            try {
                Runtime.getRuntime().exec("logcat -c");
            } catch (IOException e) {
            }
        } catch (IOException e) {
            Log.e(LOG, "extractLog", e);
            file = null;
        }

        return file;
    }
}

Android Studio – Como incluir bibliotecas nativas .so no projeto (How to include *.so library in Android Studio?)

android studio

Adicionando .so Libary no Android Studio:

  1. Criar a pasta “jniLibs” dentro de “src/main/”
  2. Coloque todas suas .so libraries dentro da pasta: “src/main/jniLibs”
  3. A estrutuda da pasta deve ficar da seguinte forma,
    |–app:
    |–|–src:
    |–|–|–main
    |–|–|–|–jniLibs
    |–|–|–|–|–armeabi
    |–|–|–|–|–|–.so Files
  4. No arquivo build.gradle modifique a linha de compilação de bibliotecas para ficar da seguinte maneira:
    compile fileTree(dir: ‘libs’, include: [‘.jar’,’.so’])
  5. Não precisa de nenhum codigo extra apenas clique em sync e rode sua aplicação.

Android Studio, Gradle – Adicionando kSOAP2 como dependência (Adding kSOAP dependency to Gradle project)

android studio

Mais uma para a coleção de configuração de projetos no Android Studio. A facilidade do Gradle para incluir dependências é incrível, mais tem algumas regrinhas para aprender. Quando se trata de dependências do Android todas elas já estão lá bem acessíveis e com uma interface gráfica para facilitar a inclusão no ‘build.gradle’, porem quando vamos incluir uma dependência de outro repositório devemos configurar algumas coisas. O Gradle utiliza o Maven para facilitar essa inclusão, iremos configurar a inclusão da biblioteca ksoap2-android.

1 – Vamos abrir o ‘build.gradle’ do PROJETO, ele deve estar assim: Continue reading

Android Studio – Importanto a biblioteca Simple-Xml (Importing Simple-Xml library)

JavaXMLSimple-XML é uma biblioteca de serialização e configuração XML de alto desempenho para Java. Seu objetivo é proporcionar um mapeamento XML que permite o rápido desenvolvimento em XML. Essa biblioteca favorece ao desenvolvimento de sistemas de XML com o mínimo esforço e redução de erros. Dispõe de serialização de objeto completo e desserialização, mantendo cada referência encontrada. Veja mais como ela funciona e como utilzala em seu site: http://simple.sourceforge.net/home.php

Ao importarmos a biblioteca no Android Studio da seguinte maneira:

compile ‘org.simpleframework:simple-xml:2.7.1′

Acaba gerando os seguintes ERROS ao compilar o projeto:

=====================================
Warning:Dependency xpp3:xpp3:1.1.3.3 is ignored for debug as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class packages
Warning:Dependency xpp3:xpp3:1.1.3.3 is ignored for release as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class packages
=====================================
Error:Execution failed for task ‘:app:preDexDebug’.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘/usr/lib/jvm/java/bin/java” finished with non-zero exit value 1
===================================
java.lang.NoClassDefFoundError: org.simpleframework.xml.core.Persister
=====================================

As Libraries stax-api e xpp3 entram em conflito com as classes do Android. As classes destes .jars parecem estar incluídas no Android.
Para solucionar devemos implementar as dependências da seguinte maneira: Continue reading