Selasa, 14 Agustus 2012

Membuat Browse File Explorer pada Android (Pemrograman Android)

Di berbagai bahasa pemrograman seperti VB, Delphi, Java, PHP, ASP, JSP kita mengenal Open Dialog dengan berbagai bentuknya sendiri-sendiri. Komponen tersebut berguna saat kita hendak memilih suatu file untuk membuka, memproses atau menyimpan sebuah file.

Bagaimana dengan di Android. Ternyata di Android tidak ada komponen semacan Open Dialog tersebut. Terpaksalah kita membuat sendiri semacam window (Activity) untuk memilih file agar user friendly. Kali ini kita coba membuatnya. Caranya buat project Android.

Kemudian pada file main.xml ubah sehingga menjadi seperti di bawah ini :

main.xml :

<?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/path"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<ListView
 android:id="@android:id/list"
 android:layout_width="fill_parent"
    android:layout_height="wrap_content"
 />
<TextView
 android:id="@android:id/empty"
 android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="No Data"
 />
</LinearLayout>

Buat satu lagi file layout di folder res/layout dengan nama row.xml :

row.xml


<?xml version="1.0" encoding="utf-8"?>

<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/rowtext"
  android:layout_width="fill_parent"
     android:layout_height="25px"
     android:textSize="23sp" />

Kemudian pada Activity utama, tambahkan kode program berikut :

MainActivity

package com.amijaya.openfiledialog;

// http://cariprogram.blogspot.com
// nuramijaya@gmail.com
// source : http://android-er.blogspot.com/2010/01/implement-simple-file-explorer-in.html

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends ListActivity {

private List<String> item = null;
private List<String> path = null;
private String root = "/";
private TextView myPath;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myPath = (TextView) findViewById(R.id.path);
getDir(root);
}

private void getDir(String dirPath) {
myPath.setText("Location: " + dirPath);
item = new ArrayList<String>();
path = new ArrayList<String>();
File f = new File(dirPath);
File[] files = f.listFiles();
if (!dirPath.equals(root))
{
item.add(root);
path.add(root);
item.add("../");
path.add(f.getParent());
}

for (int i = 0; i < files.length; i++)
{
File file = files[i];
path.add(file.getPath());
if (file.isDirectory())
item.add(file.getName() + "/");
else
item.add(file.getName());
}

ArrayAdapter<String> fileList =
new ArrayAdapter<String>(this, R.layout.row, item);
setListAdapter(fileList);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
File file = new File(path.get(position));
if (file.isDirectory())
{
if (file.canRead())
getDir(path.get(position));
else
{
new AlertDialog.Builder(this)
.setIcon(R.drawable.icon)
.setTitle("[" + file.getName() + "] folder can't be read!")
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
}
else
{
new AlertDialog.Builder(this)
.setIcon(R.drawable.icon)
.setTitle("[" + file.getName() + "]")
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
}
}

Jangan lupa, jika ingin dapat mengakses Storage External (SDCARD) tambahkan permission berikut pada AndroidManifest.xml :

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amijaya.openfiledialog"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
</manifest>

Hasilnya :



Project selengkapnya dapat didownload disini. Setelah masuk Google Docs, klik File-Download.

Semoga berguna.