27 Mar

Mendapatkan Activity yang Sedang Aktif

Dear Android Developers,

ada kalanya kita membutuhkan perintah untuk mengetahui activity apa yang sedang aktif ditampilkan ke user saat ini. Langkah pertama adalah dengan menambahkan permission pada AndroidManifest.xml

uses-permission android:name="android.permission.GET_TASKS"

kemudian kita bisa mendapatkan activity yang aktif dengan menggunakan kode program berikut

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);

// get the info from the currently running task
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1); 

Log.d("topActivity", "CURRENT Activity ::"
        + taskInfo.get(0).topActivity.getClassName());

ComponentName componentInfo = taskInfo.get(0).topActivity;
String paket = componentInfo.getPackageName();

Selamat Mencoba dan semoga bermanfaat

23 Mar

Memakai Custom Font pada TextView Android

Untuk menggunakan CustomFont di dalam TextView dibutuhkan trik khusus. Karena secara default, TextView hanya bisa menggunakan jenis Font yang sudah ada di dalam sistem Android.

Custom Font artinya kita menggunakan font pilihan kita sendiri berupa font dengan format TTF. Berikut langkah-langkahnya:

1.  Buat project Android baru (standard).

2. Buka res/layout/activity_main.xml tambahkan 2 komponen TextView menjadi seperti ini:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/DefaultFontText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:text="Ini dengan font biasa" />
    <TextView
        android:id="@+id/CustomFontText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:text="Ini dengan Custom Font">
        </TextView>
</LinearLayout>

3. Cari font yang disukai. Bisa dari google font atau dari website lain. Yang penting formatnya .TTF

4. Copy font tersebut ke assets/fonts/. kalau di dalam folder assets belum ada folder fonts, maka bisa dibuat dengan klik kanan assets > new > directory. Contohnya saya memasukkan font FontKeren.TTF

5. Buka Main.java (Main Activity Default) dan edit kode programnya  menjadi sbb:

public class Main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/FontKeren.TTF");
        TextView tv = (TextView) findViewById(R.id.CustomFontText);
        tv.setTypeface(tf);
    }
}

6. Kemudian jalankan program dan lihat hasilnya :)

 

Kesimpulan

Untuk mengeset font custom ke dalam TextView kita bisa menggunakan cara melakukan load TypeFace dari folder assets. Kemudian kita dari komponen textview kita panggil setTypeface untuk mengeset font yang diinginkan.

11 Mar

Share Intent untuk Sharing berbagai media di Android

Dear JavaClopedia Fans,

saat berbagi tips lagi, yang tips ini saya dapatkan ketika membuat aplikasi experimental serial Marbel. Contoh-contoh aplikasi dapat dilihat di link ini: Educa Studio Android Apps & Games

Okeh, langsung saja. Kadang kita sebagai programmer dibuat pusing karena berbagai macam API yang tersedia untuk melakukan Sharing media di berbagai Social Network. Untuk lebih mudahnya, ternyata kita bisa memakai Share Intent. Berikut kode program lengkapnya:

Intent intent=new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

intent.putExtra(Intent.EXTRA_SUBJECT, “Some Subject Line”);
intent.putExtra(Intent.EXTRA_TEXT, “Body of the message, woot!”);

startActivity(Intent.createChooser(intent, “How do you want to share?”));

Perhatikan kode di atas, pertama kita membuat intent baru dengan Tipe ACTION_SEND. Baris berikutnya, kita tentukan tipe datanya apakah teks, image, audio dan lain-lain. Type ini sangat penting karena akan menentukan jenis-jenis Share Social yang akan ditampilkan ke user. Selanjutnya, pada bagian EXTRA_SUBJECT digunakan untuk menentukan judulnya. Sedangkan EXTRA_TEXT digunakan untuk menentukan deskripsinya.

Langkah terakhir adalah dengan menentukan pertanyaan pada Sharing Intent yang akan kita tampilkan dengan cara startActivity().

Semoga Bermanfaat,

Best Regards,

Andi Taru – JavaClopedia Founder 

11 Mar

Fungsi Layout Weight sebagai Spacer dalam Linear Layout

Dear JavaClopedia Fans,

Kemarin hari Sabtu saya penasaran dengan yang namanya android:layout_weight di dalam desain XML Layout Android. Pasalnya saya asal pakai di dalam membuat produk Marbel Dongeng. Karena awalnya asal pakai jadinya tidak begitu paham dan saya niatkan untuk menelusuri apa maksud dari komponen tersebut. Nah sobat JavaClopedia, berikut ulasannya.

Sebelum kita melihat implementasi secara langsung, kasusnya adalah sebagai berikut. Saya ingin membuat desain layout di Android dengan urutan:

** Icon 1 ********* Icon 2 ** Icon 3 **

Icon 1 memiliki layout LEFT, sedangkan Icon 2 dan Icon 3 memiliki layout RIGHT. Seandainya dijalankan di dalam device yang lebih lebar akan menjadi seperti ini:

** Icon 1 ***************************** Icon 2 ** Icon 3 **

kesimpulannya adalah, seberapa lebar device yang ada. Maka posisi Icon 2 dan Icon 3 akan berada di bagian kanan (RIGHT). seandainya Icon 2 saya hapus akan menjadi seperti ini nantinya:

** Icon 1 ************************************** Icon 3 **

Contoh kasus di atas dapat kita wujudkan menggunakan komponen android:layout_weight sebagai spacer. Kenapa disebut spacer? karena dapat memberikan ruang yang dinamis kepada komponen View tertentu.

Berikut contoh kode programnya:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="72dp" android:orientation="horizontal" android:background="@android:color/holo_purple">
 
    <imageview android:layout_width="72dp" android:layout_height="fill_parent" android:src="@android:drawable/star_big_on" android:background="@android:color/transparent"></imageview>
     
    <!-- If only 1 View has a layout weight then it will automatically fill the rest of the LinearLayout in that dimension. -->
    <imageview android:id="@+id/SpacerView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"></imageview>
     
    <imagebutton android:id="@+id/show_map" android:layout_width="72dp" android:layout_height="fill_parent" android:src="@android:drawable/ic_menu_add" android:background="@android:color/transparent"></imagebutton>
    <imagebutton android:id="@+id/show_phone" android:layout_width="72dp" android:layout_height="fill_parent" android:src="@android:drawable/ic_menu_edit" android:background="@android:color/transparent"></imagebutton>
 
</linearlayout>

Perhatikan baik-baik bagian android:layout_weight=”1″, pada bagian tersebut artinya adalah komponen tersebut akan memiliki weight (lebar) yang semaksimal mungkin sisa dari pemakaian ruang dari komponen yang lain. Apabila tidak ada komponen yang lain maka otomatis akan memenuhi lebar device.

Semoga bermanfaat bagi teman-teman

Best Regards,

Andi Taru – JavaClopedia Founder

11 Mar

Deteksi Click pada Radio Button Android

Dear JavaClopedia Developers,

Tutorial baru lagi nih, mumpung super semangat. Berikut akan saya bahas mengenai cara mendeteksi event Click pada Radio Button yang telah kita masukkan ke dalam desain Layout XML. Ada 2 cara memberikan deteksi event Click pada Radion Button. Kita mulai yang pertama.

1. Ditentukan melalui Layout XML

cara yang pertama, kita dapat menentukan method yang akan dipanggil ketika Radio Button tersebut di click. perhatikan potongan kode program pada XML Layout berikut ini:

RadioButton
        android:id="@+id/radio_right1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rad_option1"
        android:checked="true"
        android:textColor="#f00"
        android:onClick="onRadioButtonClick"
/>

perhatikan kode program android:onClick=”onRadionButtonClick” artinya adalah kita tentukan apabila nanti RadioButton di klik, maka panggilan method onRadionButtonClick(). Kira-kira begitu logika gampangnya. selanjutnya berarti di dalam Activity, kita harus tambahkan method tersebut seperti berikut ini:

public void onRadioButtonClick(View v) {
    RadioButton button = (RadioButton) v;
    Toast.makeText(SimpleRadioButtonActivity.this,
        button.getText() + " was chosen.",
        Toast.LENGTH_SHORT).show();
}

2. Diset di dalam kode program (programatically)

cara yang kedua, adalah dengan menggunakan kode program secara langsung. Perhatikan potongan kode program berikut ini:

RadioGroup radio = (RadioGroup) findViewById(R.id.radio_right1);
OnClickListener radio_listener = new OnClickListener() {
    public void onClick(View v) {
        onRadioButtonClick(v);
    }
};

Perhatikan bahwa di dalam kode program di atas, kita override method public void onClick() kemudian di dalamnya kita isi dengan kode program yang akan dijalankan ketika Radio Button tersebut di click oleh user.

Selamat Mencoba!

Best Regards,

Andi Taru – JavaClopedia

11 Mar

Membuat Custom Dialog pada Android

Dear Android Developer, apa kabar semua.

Pada tutorial kali ini saya ingin mengulas tentang cara membuat custom dialog. Dialog pada Android umumnya hanya terdiri dari teks dan icon serta satu sampai tiga button yaitu Positive Button, Neutral Button dan Negative Button. Contoh dari dialog biasa adalah seperti berikut ini:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Enter Password");
builder.show();

Tampilan dialog tersebut, sebenarnya dapat dengan mudah kita ubah  tampilannya menjadi dialog yang sesuai dengan keinginan kita. Caranya adalah dengan membuat layout khusus. Misalnya kita memiliki layout buatan kita sendiri (tempatnya ada di folder res/layout) dengan nama custom_dialog.xml.

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:id="@+id/root"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/TextView_Pwd1"
        android:text="@string/settings_password"
        android:textStyle="bold" />
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/EditText_Pwd1"
        android:inputType="textPassword" />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/TextView_Pwd2"
        android:text="@string/settings_password2"
        android:textStyle="bold" />
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/EditText_Pwd2"
        android:inputType="textPassword" />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/TextView_PwdProblem"
        android:textStyle="bold"
        android:gravity="center" />
</LinearLayout>

Setelah selesai membuat layout custom tersebut, maka yang perlu dilakukan adalah mengubah sedikit kode program kita pada AlertDialog sebelumnya menjadi:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Enter Password");
builder.setLayout(R.layout.custom_dialog);
builder.show();

Yang perlu kita tambahkan adalah builder.setLayout(R.layout.custom_layout). Selesai sudah tutorial hari ini, semoga dapat bermanfaat bagi temen-temen semua.

Best Regards,

Andi Taru – JavaClopedia

08 Mar

Android Call Phone History Programmatically

Tutorial ini berisi tentang bagaimana cara membaca phone call history melalui kode program langsung (programmatically) di device Android. Berikut langkah-langkah yang harus ditempuh:

    • Pastikan kita sudah menguasai pembuatan Hello World di Android. Kalau belum, bisa beli buku-buku android atau mencari tutorial dasar pemrograman Android atau bisa juga cari di Website ini.
    • Buat project baru standard aplikasi Android
    • Buka file AndroidManifest.xml, tambahkan permission untuk membaca contacts di HP:
<uses-permission android:name="android.permission.READ_CONTACTS" />
    • selanjutnya buat berkas custom_layout.xml di dalam folder res/layout/
<Linearlayout android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical">
<Textview android:id="@+id/call"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</Textview>
</Linearlayout>
    • berikutnya buka kode program activity yang telah dibuat. buka pada package dan class yang tersedia, lengkap kode program menjadi berikut ini:
private void getCallDetails() {

  StringBuffer sb = new StringBuffer();
  Cursor managedCursor = managedQuery( CallLog.Calls.CONTENT_URI,null, null,null, null);
  int number = managedCursor.getColumnIndex( CallLog.Calls.NUMBER );
  int type = managedCursor.getColumnIndex( CallLog.Calls.TYPE );
  int date = managedCursor.getColumnIndex( CallLog.Calls.DATE);
  int duration = managedCursor.getColumnIndex( CallLog.Calls.DURATION);
  sb.append( "Call Details :");
  while ( managedCursor.moveToNext() ) {
    String phNumber = managedCursor.getString( number );
    String callType = managedCursor.getString( type );
    String callDate = managedCursor.getString( date );
    Date callDayTime = new Date(Long.valueOf(callDate));
    String callDuration = managedCursor.getString( duration );
  String dir = null;
  int dircode = Integer.parseInt( callType );
  switch( dircode ) {
    case CallLog.Calls.OUTGOING_TYPE:
      dir = "OUTGOING";
      break;

    case CallLog.Calls.INCOMING_TYPE:
      dir = "INCOMING";
      break;

    case CallLog.Calls.MISSED_TYPE:
      dir = "MISSED";
      break;
  }
    sb.append( "\nPhone Number:--- "+phNumber +" \nCall  Type:--- "+dir+" \nCall Date:--- "+callDayTime+" \nCall    duration in sec :--- "+callDuration );
    sb.append("\n----------------------------------");
  }
  managedCursor.close();
  call.setText(sb);
}

Selamat mencoba!

Best Regards,

Andi Taru – Founder JavaClopedia and Educa Studio

25 Sep

Deteksi Multitouch di Android

Kita perlu melakukan deteksi multitouch untuk keperluan khusus, misalnya saja kita ingin membuat alat musik digital di Android. Berikut ulasan javaclopedia tentang Multitouch di Android:
1. Kita Buat kelas Extends View. Kita sebut saja MultitouchView

public class MultitouchView extends View {
        public MultitouchView(Context context) {
                super(context);
        } 
}

2. Di dalamnya perlu kita masukkan 2 konstruktur sbb:

        public MultitouchView(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
 
        }
 
        public MultitouchView(Context context, AttributeSet attrs) {
                super(context, attrs);
 
        }

3. Masuk ke main.xml (res/layout/main/xml) untuk mengatur layoutnya:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
<com.helloandroid.multitouchexample.MultitouchView
        android:id="@+id/touchView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
 
</LinearLayout>

4. Buat activity sebagai main class:

public class Main extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
        }
}

5. Tambahkan method berikut di kelas MultitouchView:

@Override
        public boolean onTouchEvent(MotionEvent event) {
                super.onTouchEvent(event);
 
               
                int action = event.getAction() & MotionEvent.ACTION_MASK;
       
                switch (action) {
                case MotionEvent.ACTION_DOWN: {
                        Log.d("MultitouchExample","Action Down");
                        break;
                }
                case MotionEvent.ACTION_MOVE: {
                        Log.d("MultitouchExample","Action Move");
                        break;
                }
 
                case MotionEvent.ACTION_POINTER_DOWN: {
                        Log.d("MultitouchExample","Pointer Down");
                break;
                }
                case MotionEvent.ACTION_POINTER_UP: {
                        Log.d("MultitouchExample","Pointer up");
 
                        break;
                }
                case MotionEvent.ACTION_UP: {
                        Log.d("Multitouch", "Action up");
               
                        break;
                }
                }
 
                return true;
        }

Berikut event-event yang dapat ditangani:
ACTION_DOWN dipanggil ketika jari user pertama menyentuh screen.
ACTION_MOVE dipanggil ketika user menggeser jarinya di screen.
ACTION_POINTER_DOWN dipanggil ketika jari user kedua kalinya menyentuk screen (multitouch).