Minggu, 05 Mei 2013

Contoh Program Message Dialog di Java

Contoh program berikut ini menampilkan jenis-jenis window pesan di Java. Window pesan (message dialog) antara lain bertipe warning message, information message, confirmation message, dan juga input message. Class yang digunakan adalah class JOptionPane.
Berikut ini tampilannya:
contoh-program-message-dialog-java

Berikut ini contoh programnya:
001import java.awt.*;
002 
003import java.awt.event.*;
004 
005import javax.swing.*;
006 
007 
008 
009public class MessageDialog extends JFrame {
010 
011    private JButton tombol, btn2, btn3, btn4, btn5;
012 
013     
014 
015    public MessageDialog() {
016 
017        super ("Event Handling");
018 
019         
020 
021        Container container = getContentPane();
022 
023        container.setLayout(new FlowLayout());
024 
025                 
026 
027        tombol = new JButton ("Message Dialog");
028 
029        tombol.addActionListener(
030 
031            new ActionListener() {
032 
033                public void actionPerformed (ActionEvent e) {
034 
035                    JOptionPane.showMessageDialog (null,"Contoh Message Dialog");
036 
037                }
038 
039            }
040 
041        );
042 
043        container.add(tombol);
044 
045         
046 
047        btn2 = new JButton ("Warning Message");
048 
049        btn2.addActionListener(
050 
051            new ActionListener() {
052 
053                public void actionPerformed (ActionEvent e) {
054 
055                    JOptionPane.showConfirmDialog(null, "Contoh Warning Message","Peringatan",
056 
057                        JOptionPane.CLOSED_OPTION, JOptionPane.WARNING_MESSAGE);
058 
059                }
060 
061            }
062 
063        );
064 
065        container.add(btn2);
066 
067         
068 
069        btn3 = new JButton ("Question Message");
070 
071        btn3.addActionListener(
072 
073            new ActionListener() {
074 
075                public void actionPerformed (ActionEvent e) {
076 
077                    JOptionPane.showConfirmDialog(null, "Contoh Question Message","Pertanyaan",
078 
079                        JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
080 
081                }
082 
083            }
084 
085        );
086 
087        container.add(btn3);
088 
089         
090 
091        btn4 = new JButton ("Information Message");
092 
093        btn4.addActionListener(
094 
095            new ActionListener() {
096 
097                public void actionPerformed (ActionEvent e) {
098 
099                    JOptionPane.showConfirmDialog(null, "Contoh Information Message","Informasi",
100 
101                        JOptionPane.NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
102 
103                }
104 
105            }
106 
107        );
108 
109        container.add(btn4);
110 
111         
112 
113        btn5 = new JButton ("Input Dialog");
114 
115        btn5.addActionListener(
116 
117            new ActionListener() {
118 
119                public void actionPerformed (ActionEvent e) {
120 
121                    String a = JOptionPane.showInputDialog("Input Nama : ");
122 
123                    JOptionPane.showMessageDialog(null, a);
124 
125                }
126 
127            }
128 
129        );
130 
131        container.add(btn5);
132 
133         
134 
135        setSize (200,300);
136 
137        setLocationRelativeTo(null);
138 
139        setVisible (true);
140 
141    }
142 
143     
144 
145    public static void main (String arg[]) {
146 
147        MessageDialog test = new MessageDialog();
148 
149        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
150 
151    }
152 
153     
154 
155}
Semoga bermanfaat dan menambah pengetahuan para pembaca

Sumber : http://contohprogram.info/java/contoh-program-message-dialog-di-java.html

Cara Membuat Aplikasi Chat Dengan Program Java

Dalam tulisan ini akan membahas tentang aplikasi chat sederhana menggunakan bahasa pemrograman java. Aplikasi ini akan mengimplementasikan Class ServerSocket dan Class Socket, dikembangkan dengan NetBeans 7.2 Hasil tampilan dari aplikasi ini adalah seperti gambar di bawah ini


Tampilan ChatServer ketika sedang dijalankan
 
Tampilan Chat Client ketika sedang dijalankan
 
1. buat ChatServer.java
package com.andik.chatserver;

import java.io.*;
import java.net.*;
import java.util.*;

public class ChatServer {

    private static int uniqueId;
    private ArrayList<ChatServer.ClientThread> clients;
    private int port;
    private boolean keepGoing;

    public ChatServer() {
        this.port = 9999;
        clients = new ArrayList<>();
    }

    public void start() {
        keepGoing = true;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            while (keepGoing) {
                System.out.println("ChatServer waiting for Clients on port " + port + ".");
                Socket socket = serverSocket.accept();
                if (!keepGoing) {
                    break;
                }
                ChatServer.ClientThread t = new ChatServer.ClientThread(socket);
                clients.add(t);
                t.start();
                send("login~" + t.username + "~" + t.username + " sedang login...~Server~\n");
            }
            try {
                serverSocket.close();
                for (int i = 0; i < clients.size(); ++i) {
                    ChatServer.ClientThread tc = clients.get(i);
                    try {
                        tc.sInput.close();
                        tc.sOutput.close();
                        tc.socket.close();
                    } catch (IOException ioE) {
                    }
                }
            } catch (Exception e) {
                System.out.println("Exception closing the server and clients: " + e);
            }
        } catch (IOException e) {
            String msg = "Exception on new ServerSocket: " + e + "\n";
            System.out.println(msg);
        }
    }

    private synchronized void send(String message) {
        for (int i = clients.size(); --i >= 0;) {
            ChatServer.ClientThread ct = clients.get(i);
            if (!ct.writeMsg(message)) {
                clients.remove(i);
                System.out.println("Disconnected Client " + ct.username + " removed from list.");
            }
        }
    }

    private String getClients() {
        String s = "";
        for (ClientThread clientThread : clients) {
            s += clientThread.username + ":";
        }
        s += "---";
        System.out.println(s);
        return s;
    }

    private synchronized void remove(int id) {
        for (int i = 0; i < clients.size(); ++i) {
            ChatServer.ClientThread ct = clients.get(i);
            if (ct.id == id) {
                clients.remove(i);
                return;
            }
        }
    }

    public static void main(String[] args) {
        ChatServer server = new ChatServer();
        server.start();
    }

    private class ClientThread extends Thread {

        private Socket socket;
        private ObjectInputStream sInput;
        private ObjectOutputStream sOutput;
        private int id;
        private String username;

        public ClientThread(Socket socket) {
            id = ++uniqueId;
            this.socket = socket;
            System.out.println("Menciptakan Object Input/Output Streams");
            try {
                sOutput = new ObjectOutputStream(socket.getOutputStream());
                sInput = new ObjectInputStream(socket.getInputStream());
                String message = (String) sInput.readObject();
                username = message.split("~")[1];
                System.out.println(username + " masuk.");
            } catch (IOException e) {
                System.out.println("Exception creating new Input/output Streams: " + e);
            } catch (ClassNotFoundException e) {
            }
        }

        @Override
        public void run() {
            boolean keepGoing = true;
            while (keepGoing) {

                String message;
                try {
                    message = sInput.readObject().toString();
                } catch (IOException e) {
                    System.out.println(username + " Exception reading Streams: " + e);
                    break;
                } catch (ClassNotFoundException e2) {
                    break;
                }

                String type = message.split("~")[0];
                String pengirim = message.split("~")[1];
                String text = message.split("~")[2];
                String kepada = message.split("~")[3];
                String response;

                switch (type) {
                    case "postText":
                        response = "recieveText~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "postPrivateText":
                        response = "recievePrivateText~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "login":
                        response = "login~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "logout":
                        response = "logout~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "list":
                        response = "list~server~" + getClients() + "~ ~ ~ ~ ~\n";
                        send(response);
                        break;
                }
            }

            remove(id);
            close();
        }

        private void close() {
            try {
                if (sOutput != null) {
                    sOutput.close();
                }
            } catch (Exception e) {
            }
            try {
                if (sInput != null) {
                    sInput.close();
                }
            } catch (Exception e) {
            }
            try {
                if (socket != null) {
                    socket.close();
                }
            } catch (Exception e) {
            }
        }

        private boolean writeMsg(String msg) {
            if (!socket.isConnected()) {
                close();
                return false;
            }
            try {
                sOutput.writeObject(msg);
            } catch (IOException e) {
                System.out.println("Error sending message to " + username);
                System.out.println(e.toString());
            }
            return true;
        }
    }
}

2. buat ChatClient.java
ChatClient.java ini merupakan antarmuka untuk client. Caranya adalah, klik menu File/ New File maka akan tampil dialog New File. Pilih Swing GUI Form pada list kategori dan pilih JFrame Form pada list File Types. Klik Next dan beri nama Class dengan ChatClient lalu akhiri dengan menekan tombol Finish
Buat desain seperti gambar di bawah ini

Desain Chat Client

Ubah variable jTextFiel1 menjadi serverTextField, jTextField2 menjadi portTextField, jTextField3 menjadi usernameTextField, jButton1 menjadi masukButton, jTextArea1 menjadi viewTextArea, jTextField4 menjadi postTextField, jButton2 menjadi kirimButton dan jTable1 menjadi clientTable
Jika semua sudah seperti gambar di atas, tinggal masukkan kode nya. Masukkan kode di bawah ini
 
package com.andik.chatclient;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Andik Hermawan
 */
public class ChatClient extends javax.swing.JFrame {

    /**
     * Creates new form ChatClient
     */
    private ObjectInputStream input;
    private ObjectOutputStream output;
    private Socket socket;
    private String server, username;
    private int port;
    private List<String> clients;

    public ChatClient() {
        clients = new ArrayList<>();
        initComponents();
    }

    public boolean start() {
        try {
            socket = new Socket(server, port);
        } catch (Exception ec) {
            System.out.println("Error connectiong to server:" + ec);
            return false;
        }

        String msg = "Connection accepted " + socket.getInetAddress() + ":" + socket.getPort();
        System.out.println(msg);

        try {
            input = new ObjectInputStream(socket.getInputStream());
            output = new ObjectOutputStream(socket.getOutputStream());
        } catch (IOException eIO) {
            System.out.println("Exception creating new Input/output Streams: " + eIO);
            return false;
        }

        new ChatClient.ListenFromServer().start();

        try {
            output.writeObject("login~" + username + "~" + username + " sedang login...~server~\n");
            output.writeObject("list~" + username + "~" + username + " sedang login...~server~\n");

        } catch (IOException eIO) {
            System.out.println("Exception doing login : " + eIO);
            disconnect();
            return false;
        }

        return true;
    }

    private void disconnect() {
        try {
            // TODO add your handling code here:
            output.writeObject("logout~" + username + "~" + username + " sudah logout...~Server~\n");
        } catch (IOException ex) {
            //Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            if (input != null) {
                input.close();
            }
        } catch (Exception e) {
        }
        try {
            if (output != null) {
                output.close();
            }
        } catch (Exception e) {
        }
        try {
            if (socket != null) {
                socket.close();
            }
        } catch (Exception e) {
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        viewTextArea = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        clientTable = new javax.swing.JTable();
        postTextField = new javax.swing.JTextField();
        kirimButton = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        serverTextField = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        portTextField = new javax.swing.JTextField();
        masukButton = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        usernameTextField = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        viewTextArea.setEditable(false);
        viewTextArea.setColumns(20);
        viewTextArea.setLineWrap(true);
        viewTextArea.setRows(5);
        viewTextArea.setFocusable(false);
        jScrollPane1.setViewportView(viewTextArea);

        jScrollPane2.setViewportView(clientTable);

        postTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                postTextFieldActionPerformed(evt);
            }
        });

        kirimButton.setText("Kirim");
        kirimButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                kirimButtonActionPerformed(evt);
            }
        });

        jLabel2.setText("Server");

        serverTextField.setText("127.0.0.1");

        jLabel3.setText("Port");

        portTextField.setText("9999");

        masukButton.setText("Masuk");
        masukButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                masukButtonActionPerformed(evt);
            }
        });

        jLabel4.setText("Username");

        usernameTextField.setText("animous");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(postTextField)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(kirimButton))
                            .addComponent(jScrollPane1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(usernameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(masukButton)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(masukButton)
                    .addComponent(jLabel4)
                    .addComponent(usernameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(postTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(kirimButton))))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void masukButtonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        this.server = serverTextField.getText();
        this.port = new Integer(portTextField.getText());
        this.username = usernameTextField.getText();
        start();
    }

    private void kirimButtonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        try {
            String message = "postText~" + username + "~" + postTextField.getText() + "~all~\n";
            output.writeObject(message);
            postTextField.setText("");
        } catch (IOException ex) {
            Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void postTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        kirimButtonActionPerformed(evt);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ChatClient().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JTable clientTable;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JButton kirimButton;
    private javax.swing.JButton masukButton;
    private javax.swing.JTextField portTextField;
    private javax.swing.JTextField postTextField;
    private javax.swing.JTextField serverTextField;
    private javax.swing.JTextField usernameTextField;
    private javax.swing.JTextArea viewTextArea;
    // End of variables declaration

    class ListenFromServer extends Thread {

        @Override
        public void run() {
            while (true) {
                try {
                    String msg = (String) input.readObject();
                    String res;
                    String type = msg.split("~")[0];
                    String pengirim = msg.split("~")[1];
                    String text = msg.split("~")[2];
                    String kepada = msg.split("~")[3];
                    switch (type) {
                        case "recieveText":
                            res = pengirim + ": " + text;
                            viewTextArea.setText(viewTextArea.getText() + res + "\n");
                            break;
                        case "recievePrivateText":
                            res = pengirim + ": " + text;
                            if (kepada.equals(username)) {
                                viewTextArea.setText(viewTextArea.getText() + res + "\n");
                            }
                            break;
                        case "login":
                            viewTextArea.setText(viewTextArea.getText() + pengirim + " sedah login..." + "\n");
                            clients.add(pengirim);
                            break;
                        case "logout":
                            viewTextArea.setText(viewTextArea.getText() + pengirim + " telah logout..." + "\n");
                            clients.remove(pengirim);
                            break;
                        case "list":
                            setTable(text);
                            break;
                    }
                } catch (IOException e) {
                    System.out.println("Server has close the connection: " + e);
                    break;
                } catch (ClassNotFoundException e2) {
                }
            }
        }

        private void setTable(String text) {
            int rows = text.split(":").length - 1;
            Object[][] data = new Object[rows][1];
            for (int i = 0; i < rows; i++) {
                String t = text.split(":")[i];
                data[i][0] = t;
            }

            String[] header = {"Clients"};

            clientTable.setModel(new DefaultTableModel(data, header));
        }
    }
}

Aplikasi ini dapat dikembangkan menjadi aplikasi chat yang lebih komplit seperti voice call, video call dengan menggunakan JMF (Java Media Framework)
Untuk pengembangannya menggunakan JMF dilanjutkan nanti pada tulisan selanjutnya…
Semoga bermanfaat…


Sumber : http://update-area.blogspot.com/2013/05/cara-membuat-aplikasi-chat.html

Kamis, 02 Mei 2013

Penjelasan Tanda Signal BlackBerry dan Solusi Perbaikan


Signal BlackBerry hilang/SOS, terkadang juga signal BlackBerry menjadi GSM, atau signal BlackBerry GPRS/EDGE/3G yang tadinya huruf besar menjadi huruf kecil gprs/edge/3g tentu sangat menjengkelkan, sehingga membuat BlackBerry lemot dan beberapa layanan BlackBerry tidak dapat digunakan seperti Browsing, BlackBerry Messenger, dan lainnya. Maka dari itu pada blog Trik dan Tips BlackBerry ini saya menambahkan artikel tentang Penjelasan Tanda Signal BlackBerry dan Solusi Perbaikan, agar anda menggerti setiap tanda signal yang muncul pada BlackBerry anda dan tahu cara perbaikannya.

Berikut penjelasan tanda signal BlackBerry dan solusi untuk perbaikannya:

1.    Tanda Signal SOS Pada BlackBerry
Signal SOS pada BlackBerry menandakan bahwa BlackBerry anda tidak mendapat signal/signal hilang, bisa saja terjadi jika anda berada di ruangan yang sangat minim mendapat asupan signal. Signal SOS pada BlackBerry membuat anda tidak dapat melakukan pengiriman/penerimaan SMS, Browsing, Chatting dan hampir semua layanan  yang memerlukan signal BlackBerry.
Solusi: Jika anda berada dalam ruangan minim signal, tentunya anda harus mencari tempat yang mendapat asupan signal yang cukup sehingga signal BlackBerry yang tadinya SOS kembali normal. Namun jika anda berada di ruangan yang memang mendapat asupan signal yang cukup tapi signal BlackBerry anda masih SOS, coba lakukan soft reset atau hard reset/reboot/restart BlackBerry anda, kalau masih belum bisa pancing signal BlackBerry atau bisa dengan Diagnostics Test dengan Host Routing Table.

2.    Tanda Signal GSM
Tanda signal GSM pada BlackBerry, membuat BlackBerry anda hanya bisa di gunakan untuk SMS dan Telepon, tidak ada layanan data service yang bisa di gunakan seperti chatting, Email, Browsing, dll.
Solusi: hampir sama dengan solusi tanda signal BlackBerry SOS, anda bisa pancing signal BlackBerry anda atau PING!! ke server RIM dengan Diagnostics Test.

3.    Signal BlackBerry Huruf Kecil gprs/edge/3g
Tanda signal gprs/edge/3g huruf kecil berarti anda belum melakukan pendaftaran untuk berlangganan paket data BlackBerry atau BIS. Bisa juga terjadi yang tadinya GPRS/EDGE/3G huruf besar menjadi huruf kecil gprs/edge/3g karena error pada data service di jaringan operator.
Solusi: Kalau anda belum berlangganan paket BIS anda bisa berlangganan terlebih dahulu, baca cara daftar dan info tarif. Jika memang sudah berlangganan layanan data service BlackBerry dan signal menjadi huruf kecil gprs/edge/3g maka anda bisa coba pancing signal BlackBerry anda atau lakukan Diagnostics Test.

4.    Signal BlackBerry Huruf Besar GPRS/EDGE/3G
Signal BlackBerry GPRS/EDGE/3G dengan huruf besar berarti BlackBerry anda berada dalam layanan paket data BIS sehingga anda bisa menggunakan semua fitur browsing, chatting, Email, dll sesuai paket BIS yang anda ambil. Untuk penjelasan network GPRS/EDGE/3G akan saya buat arikelnya nanti.

Cara Pancing Signal BlackBerry
Berikut step by step cara untuk pancing signal BlackBerry SOS/GSM/huruf kecil semua gprs/edge/3g, namun sebelumnya anda sudah berlangganan paket data BlackBerry tentunya.



·   Buka Manage Connection (pada homescreen arahkan kusor ke paling atas seperti pada gambar) Note: gambar di atas saya capture dari BB saya BlackBerry Apollo OS 7, untuk OS 5 masih sama hanya berbeda tampilan menu saja.
·      Uncentang box Mobile Network dan centang lagi
·      Jika signal masih belum kembali normal, PING server RIM dengan Host Routing Table.

Sumber :

SMS Kriptografi dengan Algoritma Blowfish pada Android


Secara default, SMS dikirim dalam bentuk plain text (meskipun di encoding/decoding dengan PDU) tanpa terenkripsi dari pengirim ke penerima SMS. Jika ada sniffing/penyadapan di jalur komunikasi, maka teks SMS akan sangat mudah dibaca oleh penyadap.

Tantangan anda adalah membuat aplikasi yang bisa mengenkripsi SMS yang akan dikirim, menjadi chipertext dengan algoritma kriptografi yang anda pilih sendiri. Sehingga Teks SMS yang lewat pada jalur komunikasi dan masuk ke operator seluler adalah dlm bentuk chipertext(susah ditebak isi SMSnya). Pada penerima SMS, dilakukan Deskripsi teks SMS yang berupa  chipertext sehingga bisa dibaca secara normal oleh penerima SMS.
Berikut adalah contoh aplikasi SMS kriptografi dengan Algoritma Blowfish pada Android.
Apa itu algoritma Blowfish
[wikipedia] Blowfish merupakan algoritma kunci simetrik cipher blok yang dirancang pada tahun 1993 oleh Bruce Schneier untuk menggantikan DES. Pada saat itu banyak sekali rancangan algoritma yang ditawarkan, namun hampir semua terhalang oleh paten atau kerahasiaan pemerintah Amerika. Schneier menyatakan bahwa blowfish bebas paten dan akan berada pada domain publik. Dengan pernyataan Schneier tersebut blowfish telah mendapatkan tempat di dunia kriptografi, khususnya bagi masyarakat yang membutuhkan algoritma kriptografi yang cepat, kuat, dan tidak terhalang oleh lisensi.
Keberhasilan blowfish dalam menembus pasar telah terbukti dengan diadopsinya blowfish sebagai Open Cryptography Interface (OCI) pada kernel linux versi 2.5 keatas. Dengan diadopsinya blowfish, maka telah menyatakan bahwa dunia open source menganggap blowfish adalah salah satu algoritma yang terbaik. Kesuksesan blowfish mulai memudar setelah kehadiran algoritma-algoritma dengan ukuran blok yang lebih besar, seperti AES. AES sendiri memang dirancang untuk menggantikan DES. Sehingga secara keseluruhan AES lebih unggul dari DES dan juga blowfish.
selengkapnya tentang blowfish[official] :  http://www.schneier.com/blowfish.html
Tampilan Menu Aplikasi SMS Kriptografi(Enkripsi dan Deskripsi) dengan algoritma Blowfish pada Android
Menu Kirim SMS. SMS yang dikirim akan di enkripsi dengan algoritma Blowfish dengan key yang sudah ditentukan
SMS diterima oleh handphone biasa tanpa aplikasi Deskriptor Algoritma Blowfish dalam bentuk chipertext (non human readable)

Teks SMS biasa bisa dibaca dengan aplikasi Android yang mendecrypt chiperttext menjadi plaintext
Source Code Algoritma  Blowfish
Tertarik? Silakan download dibawah ini. Aplikasi ini jauh dari sempurna, karena tidak ada yang sempurna di dunia ini, mari sempurnakan yang ada ;-)
Source Code Blowfish :

package com.rey1024.smskripto;
import android.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class Kripto {
          public static String enkripsi(String pesan, String key){
               try {
                    SecretKeySpec KS = new SecretKeySpec(key.getBytes(), "Blowfish");
                     Cipher cipher = Cipher.getInstance("Blowfish");
                    cipher.init(Cipher.ENCRYPT_MODE, KS);
                    byte[] encrypted = cipher.doFinal(pesan.getBytes());      
                    return Base64.encodeToString(encrypted, Base64.NO_PADDING);
               } catch (Exception e) {
                     return "ERROR:"+e.getMessage();
               }
          }          public static String deskripsi(String chiperText, String key){
               try {
                    SecretKeySpec KS = new SecretKeySpec(key.getBytes(), "Blowfish");
                    Cipher cipher = Cipher.getInstance("Blowfish");
                    cipher.init(Cipher.DECRYPT_MODE, KS);
                    byte[] decrypted = cipher.doFinal(Base64.decode(chiperText, Base64.NO_PADDING));
                    return new String(decrypted);
               } catch (Exception e) {
                     return "ERROR";
               }
          }   
}

Download Source Code Lengkap : SMS Kriptografi(Enkripsi dan Deskripsi) dengan Blowfish Algorithm (656)

Sumber : http://www.rey1024.com/2013/01/sms-kriptografi-dengan-algoritma-blowfish-pada-android/