Android

5 jan, 2017

Como criar um aplicativo similar ao WhatsApp

Publicidade

O presente artigo detalhará como se criar uma aplicação nos moldes do WhatsApp. Ao final, você será capaz de criar um aplicativo tal como o mostrado abaixo.

http://docs.back4app.com/wp-content/uploads/2016/12/ezgif.com-optimize.gif

Antes de iniciar, garanta que seu projeto tenha ativado a API de Live Queries na plataforma Back4app. Utilize o seguinte link um guia para configurar as Live Queries: Live Query.

Criar uma Classe Mensagem

Teremos que criar uma classe chamada Message no Parse Dashboard. A mesma conterá os campos: Content, Sender e Message. Os resultados são mostrados abaixo.

whatsapp1

Mais uma vez: não se esqueça de seguir os passos descritos no artigo relativo ao Live Query. Feito isto, todos os passos inerentes ao backend estão finalizados. Vamos agora para a aplicação.

Criar o projeto

No Android Studio, crie um novo projeto tal como mostrado abaixo:

whatsapp2

Selecione os Form Factors tal como mostrado abaixo:

whatsapp3

Selecione Basic Activity Model:

whatsapp4

Nomeie como MessageBoardActivity:

whatsapp5

Vamos, agora, adicionar elementos ao aplicativo.

Adicionar elementos ao App

Assim que abrir o projeto, vá para o Res Folder e encontre o Layout Folder. Feito isto, encontre o arquivo “activity_message_board.xml” e clique duas vezes sobre o mesmo para abrir a parte relacionada ao layout. Note que o template tem início com o botão FloatingActionButton nomeado de “fab”. Primeiramente, devemos renomear este botão, clicando uma vez no seu nome no Component Tree.

whatsapp6

Mude seu ID para “send”, tal como mostrado abaixo:

whatsapp7

Deve-se agora adicionar elementos ao aplicativo. Neste mesmo layout adicione o RelativeLayout para o CoordinatorLayout e adicione o PlainText no layout que foi criado. O ComponentTree ficará algo parecido com o mostrado abaixo:

whatsapp8

Mude o ID do PlainText para “message” e altere seu “hint” para o campo “Type your Message” – deixe este campo como “text”. Também faça o campo “singleLine” ser ticado como True e seu “inputType” para “textShortMessage”. Todos estes ajustes podem ser realizados na tab Properities tal como mostrado abaixo:

whatsapp9

Alinhe o elemento “message” com o botão “send” e estará tudo certo com este arquivo. Agora, vá para o arquivo “content_message_board.xml” e clique duas vezes sobre o mesmo.

Você verá outra parte do layout. Este layout será incluído naquele que foi modificado anteriormente, de forma automática, tão logo o app venha a mostrar o seu conteúdo. Vamos primeiramente modificar o ID do TextView. O mesmo está em RelativeLayout na “messageBoard”.

Feito isto, deixe em branco o campo “text” e cheque o campo “layout_alignParentBottom”. O mesmo deixará você alterar o tamanho do campo “text” para o tamanho desejado. No presente exemplo, o campo “layout_marginBottom” foi configurado para “50 dp”, que é um tamanho bastante conveniente. Esta opção está em “Layout_Margin”.

Você também necessitará configurar o campo “gravity” para “bottom”. Desta forma, o texto vem de baixo para cima. É necessário configurar o campo “maxLines” para 20 para que tão logo o chat esteja cheio, não ultrapasse os elementos “message” ou “send”.

whatsapp10

Agora, devemos apenas notar que também existe um layout para o menu pequeno que aparece no canto superior direito. É importante saber que este layout apresenta o ID “action_settings”. É necessário programar cada elemento que tenha sido alterado ou adicionado nos layouts.

Adicionar código ao App

Toda parte do código que realiza alguma funcionalidade deve ser adicionada dentro do método “onCreate” em MessageBoardActivity. Primeiramente, vamos detalhar os elementos que vamos utilizar.

// Elements we are going to use
FloatingActionButton sendButton = (FloatingActionButton) findViewById(R.id.send);
final TextView messageBoard = (TextView) findViewById(R.id.messageBoard);
messageBoard.setMovementMethod(new ScrollingMovementMethod());
final EditText message = (EditText) findViewById(R.id.message);

Agora, devemos inicializar a API do Back4app tal como mostrado no tutorial do Live Query. O próximo passo é adicionar o texto para “messageBoard” tão logo o mesmo seja criado.

// Subscription being made that receives every message
final Subscription sub = new BaseQuery.Builder("Message")
        .where("type", "message")
        .addField("sender")
        .addField("content")
        .addField("type")
        .build()
        .subscribe();

// If a message is created, we add to the text field
sub.on(LiveQueryEvent.CREATE, new OnListener() {
    @Override
    public void on(JSONObject object) {
        try {
            String message = (String) ((JSONObject) object.get("object")).get("content");
            String sender = (String) ((JSONObject) object.get("object")).get("sender");
            String toBeAdded = sender + ": " + message;

            final String updatedText = '\n' + toBeAdded;

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    messageBoard.append(updatedText);
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});

Devemos adicionar a funcionalidade para o botão “send”. Primeiramente, vamos criar um campo String nomeado “sender”. O mesmo no presente exemplo terá um valor padrão de “Back4User” na mesma classe em que estaremos adicionando a funcionalidade. A seguir, devemos acrescentar o código abaixo de forma que a mensagem seja enviada.

// Implementing the actions that our app will have
// Starting with the sendButton functionality
sendButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        String messageToSend = message.getText().toString();

        Log.i("Message", "created correctly, "+messageToSend);

        //Creating and sending the message
        ParseObject click = new ParseObject("Message");
        click.put("content", messageToSend);
        click.put("sender", sender);
        click.put("type", "message");
        click.saveInBackground(new SaveCallback() {
            @Override
            public void done(ParseException e) {
                Log.i("Message", "Sent correctly");
            }
        });

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //Setting the text blank again
                message.setText("");
            }
        });
    }
});

O próximo elemento a ser configurado é o botão Settings (“action_settings”). O desenho deste tipo de menu é tal que apresenta seus próprios métodos para disparar as opções de menu. Logo, é imperativo que se modifique seus próprios métodos que são “onOptionsItemSelected”. Localize a declaração “if” que apresenta a seguinte condição.

if (id == R.id.action_settings) {
    ...
}

E adicione o seguinte código:

//Creates a 
final EditText txtUrl = new EditText(this);

new AlertDialog.Builder(this)
        .setTitle("Settings")
        .setMessage("Please write the username you want")
        .setView(txtUrl)
        .setPositiveButton("Change username", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                //Sets the sender
                sender = txtUrl.getText().toString();
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            }
        })
        .show();

Neste app, utilizamos as capacidades das Live Queries para criar um Messenger minimalista para Android. Criamos as classes e as mesmas foram usadas para enviar as mensagens no Back4app. Então, configuramos o projeto Android usando o template que Google disponibiliza via Android Studio.

Depois disso, adicionamos e personalizamos os elementos do aplicativo (botões, campos de textos e layouts). Finalmente, nós adicionamos o código que envia a mensagem ao botão existente no layout.