¿Cómo crear una aplicación Android de conversión de código Morse?

El código Morse es una forma en la que uno puede codificar caracteres y texto usando puntos y rayas. Los códigos Morse internacionales contienen 26 letras del alfabeto y algunas letras no inglesas que son números arábigos, así como algunos signos de puntuación. En código Morse, no hay diferencia entre las letras mayúsculas y minúsculas. La transmisión del Código Morse se mide en duraciones de puntos. La aplicación Morse Code Converter es una aplicación que se utiliza para convertir las declaraciones dadas al código Morse. Esto se hace usando Android Studio . Los lenguajes que se utilizan son Java y XML .
MORSE-CODE-COVERTER

Entonces, en este artículo, vamos a crear una aplicación de Android de conversión de código Morse usando el lenguaje Java. Este proyecto también involucra la conversión del Código Morse en Declaraciones relevantes. Significa que tanto la codificación como la decodificación se pueden realizar con esta aplicación de Android.
Morse-Code-Converter

Herramientas de software requeridas

Las herramientas de software requeridas en este proyecto son:

  1. ANDROID-STUDIO IDE (1.0.2)
  2. SDK con nivel de API 21 (versión mínima)
  3. JAVA 7 y superior
  4. Un teléfono inteligente Android: versión 4.2.2 (Jelly bean y superior) (solo para probar el software)

Acercarse

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: crea un botón redondo

Este paso es opcional (solo si desea un botón negro con esquinas redondeadas). En la pestaña del proyecto , en la esquina izquierda de la pantalla, haga clic en la carpeta de la aplicación . Luego, haga clic en la carpeta res . Luego, haga clic con el botón derecho en la carpeta dibujable y seleccione Nuevo , luego seleccione Archivo de recurso dibujable . Asigne un nombre a este archivo de recursos. Recuerde que solo puede usar letras minúsculas para el nombre del archivo de recursos. Escriba el código a continuación para crear un archivo de recursos para botones negros con esquinas redondeadas. Utilice este archivo de recursos como fondo en el código XML de los botones para obtener botones negros con esquinas redondeadas.

mybutton.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="15dip" />
            <stroke android:width="1dip" android:color="#5e7974" />
            <gradient android:angle="-90" android:endColor="#091037" 
                                     android:startColor="#0C000E" />
        </shape>
    </item>
</selector> 

En caso de que desee utilizar el botón predeterminado o algún otro botón, omita este paso opcional y no incluya el archivo de recursos en el fondo de los botones.

Paso 3: trabajar con el archivo activity_main.xml

  • Abra el archivo activity_main.xml y comience a escribir el código xml.
  • Cree 2 EditTexts en el archivo xml. Uno para escribir la entrada y el otro para mostrar la salida. Los EditTexts se utilizan porque al hacer clic en EditTexts, el texto se puede seleccionar y copiar, lo que será muy útil para enviar el mensaje codificado/sin codificar a otra persona que utilice cualquier aplicación de mensajería.
  • Haga 3 botones : codificar, decodificar y borrar.
    • El botón Codificar tomará la entrada como texto del EditText de entrada y luego la codificará en código morse y la mostrará en el EditText de salida.
    • El botón Decode tomará el código morse como entrada del EditText de entrada y luego lo decodificará en alfabetos y números y lo mostrará en el EditText de salida.
    • El botón Borrar borrará los EditTexts de entrada y salida.
  • Proporcione identificaciones a todos los EditTexts y Buttons.

El código xml completo se proporciona a continuación:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#006600"
    android:padding="25dp"
    tools:context=".MainActivity">
  
    <TextView
        android:id="@+id/tvgfg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="-8dp"
        android:gravity="center"
        android:text="GfG"
        android:textAlignment="center"
        android:textColor="#000"
        android:textSize="25sp"
        android:textStyle="italic" />
  
    <EditText
        android:id="@+id/etinput"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_below="@+id/tvgfg"
        android:layout_marginTop="5dp"
        android:background="#ffffff"
        android:gravity="start" />
      
    <!--edit text to accept the input from the user-->
    <LinearLayout
        android:id="@+id/llout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_below="@+id/etinput"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:orientation="horizontal">
  
        <Button
            android:id="@+id/btnencode"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:background="@drawable/mybutton"
            android:padding="13dp"
            android:text="EnCode"
            android:textColor="#fff"
            android:textSize="20sp"
            android:textStyle="bold" />
  
        <Button
            android:id="@+id/btnclear"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:background="@drawable/mybutton"
            android:padding="13dp"
            android:text="clear"
            android:textColor="#fff"
            android:textSize="20sp"
            android:textStyle="bold" />
  
        <Button
            android:id="@+id/btndecode"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/mybutton"
            android:padding="13dp"
            android:text="decode"
            android:textColor="#fff"
            android:textSize="20sp"
            android:textStyle="bold" />
    </LinearLayout>
  
    <!--edit text to display output to the user.
        Edit text is used since the user can copy the
        text easily if he wants to-->
    <EditText
        android:id="@+id/etoutput"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/llout"
        android:layout_marginTop="10dp"
        android:background="#ffffff"
        android:gravity="start"
        android:textSize="20sp"
        android:textStyle="bold" />
      
</RelativeLayout>

Paso 4: trabajar con el archivo MainActivity.java

  • Abra el archivo MainActivity.java.
  • Inicialice las variables justo debajo de la clase MainActivity (Syntax:- Edit Text einput, etoutput;Button btnEncode, btnDecode, btnclear;)
  • Asigne las variables bajo el método OnCreate.
  • Haga una array y almacene todos los alfabetos y dígitos en ella.
  • Haga otra array y almacene el código morse de cada alfabeto y dígitos en los índices correspondientes a sus alfabetos y dígitos en la primera array.
  • Use la lógica en el código a continuación para completar la aplicación de conversión de código morse.

A continuación se muestra el código completo del archivo MainActivity.java .

MainActivity.java

package com.example.morseconverter;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
      
  // initialize variables
  EditText etinput,
  etoutput;
  Button btnEncode,
  btnDecode,
  btnclear;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  
    // Assign variables
    etinput = findViewById(R.id.etinput);
    etoutput = findViewById(R.id.etoutput);
    btnDecode = findViewById(R.id.btndecode);
    btnEncode = findViewById(R.id.btnencode);
    btnclear = findViewById(R.id.btnclear);
  
    // initializing string arrays
    final String[] AlphaNumeric = new String[37];
      
    // string array for storing alphabets and numbers
    final String[] AlphaNumeric1 = new String[37];
      
    // string array for storing corresponding morse code
    // assigning alphabets to the string array Alphanumeric[]
    AlphaNumeric[0] = "A";
    AlphaNumeric[1] = "B";
    AlphaNumeric[2] = "C";
    AlphaNumeric[3] = "D";
    AlphaNumeric[4] = "E";
    AlphaNumeric[5] = "F";
    AlphaNumeric[6] = "G";
    AlphaNumeric[7] = "H";
    AlphaNumeric[8] = "I";
    AlphaNumeric[9] = "J";
    AlphaNumeric[10] = "K";
    AlphaNumeric[11] = "L";
    AlphaNumeric[12] = "M";
    AlphaNumeric[13] = "N";
    AlphaNumeric[14] = "O";
    AlphaNumeric[15] = "P";
    AlphaNumeric[16] = "Q";
    AlphaNumeric[17] = "R";
    AlphaNumeric[18] = "S";
    AlphaNumeric[19] = "T";
    AlphaNumeric[20] = "U";
    AlphaNumeric[21] = "V";
    AlphaNumeric[22] = "W";
    AlphaNumeric[23] = "X";
    AlphaNumeric[24] = "Y";
    AlphaNumeric[25] = "Z";
    AlphaNumeric[26] = "0";
    AlphaNumeric[27] = "1";
    AlphaNumeric[28] = "2";
    AlphaNumeric[29] = "3";
    AlphaNumeric[30] = "4";
    AlphaNumeric[31] = "5";
    AlphaNumeric[32] = "6";
    AlphaNumeric[33] = "7";
    AlphaNumeric[34] = "8";
    AlphaNumeric[35] = "9";
    AlphaNumeric[36] = " ";
  
    // assigning the corresponding morse code
    // for each letter and number to 
    // Alphanumeric1[] array
    AlphaNumeric1[0] = ".-";
    AlphaNumeric1[1] = "-...";
    AlphaNumeric1[2] = "-.-.";
    AlphaNumeric1[3] = "-..";
    AlphaNumeric1[4] = ".";
    AlphaNumeric1[5] = "..-.";
    AlphaNumeric1[6] = "--.";
    AlphaNumeric1[7] = "....";
    AlphaNumeric1[8] = "..";
    AlphaNumeric1[9] = ".---";
    AlphaNumeric1[10] = "-.-";
    AlphaNumeric1[11] = ".-..";
    AlphaNumeric1[12] = "--";
    AlphaNumeric1[13] = "-.";
    AlphaNumeric1[14] = "---";
    AlphaNumeric1[15] = ".--.";
    AlphaNumeric1[16] = "--.-";
    AlphaNumeric1[17] = ".-.";
    AlphaNumeric1[18] = "...";
    AlphaNumeric1[19] = "-";
    AlphaNumeric1[20] = "..-";
    AlphaNumeric1[21] = "...-";
    AlphaNumeric1[22] = ".--";
    AlphaNumeric1[23] = "-..-";
    AlphaNumeric1[24] = "-.--";
    AlphaNumeric1[25] = "--..";
    AlphaNumeric1[26] = "-----";
    AlphaNumeric1[27] = ".----";
    AlphaNumeric1[28] = "..---";
    AlphaNumeric1[29] = "...--";
    AlphaNumeric1[30] = "....-";
    AlphaNumeric1[31] = ".....";
    AlphaNumeric1[32] = "-....";
    AlphaNumeric1[33] = "--...";
    AlphaNumeric1[34] = "---..";
    AlphaNumeric1[35] = "----.";
    AlphaNumeric1[36] = "/";
  
    btnEncode.setOnClickListener(new View.OnClickListener() {@Override
      public void onClick(View v) {
            
        // When button encode is clicked then the
        // following lines inside this curly 
        // braces will be executed
          
        // to get the input as string which the user wants to encode
        String input = etinput.getText().toString();
  
        String output = "";
          
        // variable used to compute the output
        // to get the length of the input string
        int l = input.length();
          
        // variables used in loops
        int i, j;
          
        for (i = 0; i < l; i++) {
          
          // to extract each Token of the string at a time
          String ch = input.substring(i, i + 1);
            
          // the loop to check the extracted token with 
          // each letter and store the morse code in 
          // the output variable accordingly
          for (j = 0; j < 37; j++) {
                
            if (ch.equalsIgnoreCase(AlphaNumeric[j])) {
                  
              // concat space is used to separate
              // the morse code of each token
              output = output.concat(AlphaNumeric1[j]).concat(" ");
                
                
            }
          }
        }
          
        // to display the output
        etoutput.setText(output);
      }
    });
    btnclear.setOnClickListener(new View.OnClickListener() {@Override
      public void onClick(View v) {
        // When button clear is clicked then the 
        // following lines inside this curly 
        // braces will be executed
          
        // to clear the etinput
        etinput.setText("");
          
        // to clear etoutput
        etoutput.setText("");
      }
    });
    btnDecode.setOnClickListener(new View.OnClickListener() {@Override
      public void onClick(View v) {
        // When button decode is clicked then the
        // following lines inside this curly 
        // braces will be executed
          
        // to get the input given by the user as string
        String input1 = etinput.getText().toString();
          
        // to add space to the end of the string 
        // because of the logic used in decoding
        String input = input1.concat(" ");
          
        // to get the length of the input string
        int l = input.length();
          
        // i and j are integer variables used in loops. 
        // Variable p is used as the end index of
        // substring() function
        int i, j, p = 0;
         
        // variable used as a starting
        // index of substring() function
        int pos = 0;
          
        // to store the extracted morse code 
        // for each Alphabet,number or space
        String letter = "";
          
        // a to store the output in it
        String output = "";
          
        for (i = 0; i < l; i++) {
              
          // a variable used to trigger the j loop only
          // when the complete morse code of a letter
          // or number is extracted    
          int flag = 0;
            
          // to extract each token at a time
          String ch = input.substring(i, i + 1);
           
          // if the extracted token is a space
          if (ch.equalsIgnoreCase(" ")) {
              
            // to store the value of i in p
            p = i;
              
            // to extract the morse code for each letter or number
            letter = input.substring(pos, p);
              
            // to update the value of pos so that next
            // time the morse code for the next letter 
            // or digit is extracted
            pos = p + 1;
             
            flag = 1;
          }
          String letter1 = letter.trim();
          // to delete extra whitespaces at 
          // both ends in case there are any
          if (flag == 1) {
            for (j = 0; j <= 36; j++) {
              if (letter1.equalsIgnoreCase(AlphaNumeric1[j])) {
                output = output.concat(AlphaNumeric[j]);
                break;
              }
            }
          }
        }
        // to display the output
        etoutput.setText(output);
      }
    });
  }
}

Salida: ejecutar en el emulador

Enlace de Github: Haga clic aquí

Publicación traducida automáticamente

Artículo escrito por supriya_saxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *