Tuesday, May 21, 2013

ACTIVITY, SERVICE, INTENT, CONTENT PROVIDER

Applications, Tasks and Stacks

Android dapat menjalankan beberapa aplikasi secara bersamaan
Dari sudut pandangan pengguna, setiap aplikasi adalah tugas
     tugas terdiri dari tumpukan elemen Kegiatan
     Kegiatan tidak dipetakan 1 ke 1 di aplikasi
Aplikasi dapat berbagi komponen
     Sebagai contoh, Anda dapat memanggil sebuah Kegiatan dari aplikasi lain atau perpustakaan, dan akan muncul sebagai bagian dari aplikasi
· Anda kemudian dapat kembali ke kegiatan sebelumnya ketika selesai
· Kegiatan-dapat mendorong dan muncul dari tumpukan tugas
     Ini adalah pengaturan yang sangat fleksibel!
Dapat mengkonfigurasi apakah aplikasi menggunakan tumpukan atau kegiatan tunggal




Activitiy


Activity adalah salah satu komponen aplikasi yang menyediakan sebuah layar yang mana user bisa berinteraksi dengan aplikasi, misalnya menelepon, mengambil foto, mengirim email, atau melihat peta. Setiap activity memiliki window sebagai tempat meletakkan user interface. Window tersebut biasanya memenuhi layar, bisa juga lebih kecil dari layar dan melayang di atas window lain.

Sebuah aplikasi biasanya terdiri dari beberapa activity yang satu sama lain terikat secara longgar. Biasanya, satu activity dalam sebuah aplikasi dikhususkan sabagai activity "main", yang mana akan ditampilkan kepada user disaat aplikasi dijalankan pertama kali. Setiap activity kemudian bisa menjalankan activity lain untuk melakukan pekerjaan yang berbeda. Setiap kali ada activity baru dijalankan, activity sebelumnya dihentikan, tetapi sistem menyimpan activity tersebut di dalam "tumpukan" (stack). Ketika sebuah activcity dimulai, activity tersebut ditempatkan ditempatkan paling atas pada stack dan mendapatkan fokus dari user.  Prinsip antrian stack pada dasarnya adalah "yang pertama masuk, yang terakhir keluar" (last in first out), jadi ketika user selesai dengan sebuah activity dan menekan tombol KEMBALI, activity tersebut dikeluarkan dari stack (dan dihancurkan) dan activity pada stack dibawahnya dikembalikan.

Ketika sebuah activity dihentikan karena ada activity baru yang dimulai, perubahan keadaan ini dinotifikasikan melalui siklus metode pemanggilan kembali activity . Terdapat beberapa metode pemanggilan kembali yang bisa diterima oleh activity, karena adanya perubahan keadaan dan setiap metode pemanggilan kembali menyediakan kita kesempatan untuk melakukan pekerjaan yang lebih spesifik yang sesuai dengan perubahan keadaan activity tersebut. Sebagai contoh, ketika activity berhenti, activity tersebut harus melepaskan obyek yang besar, misalnya koneksi jaringan atau database. Ketika activity dimulai kembali, kita bisa memperoleh kembali sumber daya yang dibutuhkan dan memulai kembali kegiatan yang di iterupsi. Transisi keadaan ini adalah bagian dari siklus hidup activity.



Services


Services adalah aplikasi komponen mewakili salah satu keinginan aplikasi keinginan untuk melakukan operasi longer-running walaupun tidak berinteraksi dengan pengguna atau untuk memasok fungsionalitas untuk menggunakan aplikasi lain.






Satu hal lagi tentang service di Android :

·         Service bukanlah proses terpisah

·         Service bukanlah sebuah Thread



Harap diingat ini ketika mencoba untuk mengembangkan multithreading aplikasi…

biarkan  mulai bekerja.



Dengan asumsi bahwa kita telah menciptakan proyek android dasar, berikut adalah kegiatan kami :



1
2
3
4
5
6
7
8
9
10
11
12
//AndroidservicetutorialActivity.java
package com.inchoo.tutorial;
import android.app.Activity;
import android.os.Bundle;
public class AndroidservicetutorialActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}


Membuat Service Sederhana :

Membuat kelas yang disebut FirstService di namespace anda, Service class dan Eclipse akan memandu Anda untuk mengimpor namespaces yang diperlukan dan juga menambah keterisolasian metode (onBind):

1
2
3
4
5
6
7
8
9
package com.inchoo.tutorial;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class FirstService extends Service{
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
}

Sekarang kita akan menimpa dua metode lain: onStart dan onDestroy, jadi kelas FirstService kami terlihat seperti ini :



package com.inchoo.tutorial;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class FirstService extends Service{
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
    }
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }
}



Jangan lupa untuk menambahkan pernyataan layanan ini di AndroidManifest.xml Anda untuk diatur dengan benar :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
package="com.inchoo.tutorial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".AndroidservicetutorialActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".FirstService" ></service>
</application>
</manifest>

Biarkan menambahkan log untuk mengetahui kapan service dimulai dan diakhiri juga kami akan segera menghentikan service setelah memulai seperti seseorang dari Google berkata di suatu tempat : jadi bagus untuk aplikasi lain, mulai layanan Anda, melakukan apa pun yang perlu anda lakukan, dan kemudian hentikan service setelah itu…

Akhirnya keluar FirstService.java kelas terlihat seperti ini :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.inchoo.tutorial;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class FirstService extends Service{
    private static String TAG = "Inchoo.net tutorial";
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
        Log.d(TAG, "FirstService started");
        this.stopSelf();
    }
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.d(TAG, "FirstService destroyed");
    }
}



Dan sekarang adalah saatnya untuk mulai dari aktivitas kita ( androidservicetutorialactivity.java ) :

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.inchoo.tutorial;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class AndroidservicetutorialActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startService(new Intent(this, FirstService.class));
    }
}



Mulai aplikasi android Anda dan jika Anda melihat ke dalam LogCat Anda akan menemukan baris ini:



Intent

Perpindahan Halaman Android (Intent)

Berikut ini sedikit tutorial dasar dalam programming Android, yaitu Intent. Intent adalah sebuah kelas pada Java khususnya dalam programming Android Application yang berfungsi untuk perpindahan halaman. Tidak mungkin kan kita bikin aplikasi cuma sehalaman aja, yaaa kecuali kita cuma bikin aplikasi Kalkulator dan aplikasi kecil semacamnya.
Sekarang bikin main.xml seperti dibawah ini :


Kemudian bikin 1 lagi Layout XML kek dibawah ini… Caranya, klik kanan res/layout kemudian new – Other – Android XML Layout File


Ingat konsep Activity, dia adalah single screen. Jadi satu layout adalah satu activity, berarti karena kita memiliki 2 layout berarti kita harus punya 2 activity juga…

Sekarang bikin activity dulu buat tampilan kedua diatas… diasumsikan sudah bisa ngatur activity.  Jadi sekarang saya tinggal share aksi-aksinya aja…

Untuk tampilan 1, beri aksi di tombol seperti dibawah ini :


Untuk tampilan 2, beri kode dibawah ini pada bagian aksi :


Masih ada 1 langkah lagi, kita harus “mendaftarkan” activity yang kita buat ke dalam AndroidManifest.xml jadi apabila kita memiliki 10 activity, berarti 10 activity tersebut harus kita daftarkan tadi. Caranya :
  1. Buka AndroidManifest.xml
  2. Pada tab dibagian bawah, pilih Application
  3. Scroll ke paling bawah, Application Node, klik Add pilih Radio Button “Create a new element at the top level, in Application” pilih Activity
  4. Bagian kanannya, Bagian Name pilih Browse, pilih Activity yang ingin didaftarkan
  5. Save atau CTRL+S
 Kira-kira begini kalo di printscreen :

Kalo mau liat xml lengkapnya dibawah ini :


 

BroadcastReceiver

BroadcastReceiver adalah agak seperti Service
     Tidak UI
     Tapi tidak berjalan terus menerus di latar belakang
Anda mendaftar untuk acara BroadcastReceiver untuk merespon
     Ketika mereka terjadi, OS otomatis memicu metode yang tepat dari contoh BroadcastReceiver terdaftar
     Ketika peristiwa terjadi, mereka sebuah Intent dilewatkan, yang menentukan sesuatu tentang jenis tindakan, dan data yang mungkin berhubungan
     Misalnya, SMS masuk, dan Intent akan memiliki nomor telepon SMS dan teks di dalamnya



Content Provider


Sekarang kita bahas apa itu Content Provider, secara garis besar Content Provider adalah platform android untuk sharing informasi antar aplikasi android. Contoh untuk akses informasi device android Anda pada aplikasi, Anda bisa menggunakan ContentProvider. Berikut adalah contoh kodingnya. Kita akan menggunakan kode pada blog sebelumnya dengan penambahan sedikit. Kita akan menambahkan ListView untuk display device information



1. Buat file xml pada folder res-layout : row.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_height=”wrap_content”
android:padding=”5sp”
android:layout_width=”fill_parent”>
<TextView
android:layout_height=”wrap_content”
android:id=”@+id/textName”
android:text=”Name”
android:textSize=”18sp”
android:layout_width=”fill_parent”
android:layout_weight=”1″></TextView>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:id=”@+id/textValue”
android:text=”Value”
android:textSize=”18sp”
android:gravity=”right”></TextView>
</LinearLayout>

2. Edit kode pada layout activity_main.xml

<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”
tools:context=”.MainActivity” >

<TextView
android:id=”@+id/text1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_centerHorizontal=”true”
android:layout_centerVertical=”true”
android:text=”@string/hello_world” />

<fragment
xmlns:android=”http://schemas.android.com/apk/res/android”
android:name=”com.example.test.Header”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:text=”Header”
android:id=”@+id/tutview_fragment”>
</fragment>

<Button
android:id=”@+id/buttonTestIntent”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Start”/>

<ListView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/listView”>
</ListView>

</RelativeLayout>

Kita menambahkan ListView

3. Edit kode MainActivity.java

package com.example.test;

import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.Settings;
import android.provider.UserDictionary;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {

private TextView textView;
private View view;
private LayoutInflater inflater;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView  text = ( TextView)findViewById(R.id.text1);

text.setText(“Test”);

Button button = (Button)findViewById(R.id.buttonTestIntent);
button.setOnClickListener(clickListener); //

}

private OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {

//startService(new Intent(MainActivity.this,TestService.class));

ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null);

startManagingCursor(cursor);

ListView listView = (ListView) findViewById(R.id.listView);
String[] from = { Settings.System.NAME, Settings.System.VALUE };
int[] to = { R.id.textName, R.id.textValue };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.layout.row, cursor, from, to);
listView.setAdapter(adapter);
}
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

Kode yang harus diperhatikan adalah bagian ini:

// instantiasi content provider

ContentResolver cr = getContentResolver();

// fungsi kode dibawah adalah query content provider dengan URI = content://settings/system atau Settings.System.CONTENT_URI

// URI itu mirip URL pada web , cuman gunanya disini sebagai alamat data yang akan diambil

// Jadi pada kode dibawah data yang akan diambil pada path=system dan authority = settings, authority adalah kode kata unik untuk mengakses ContentProvider

Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null);

// Manage  cursor, cursor adalah objek untuk mengakses data
startManagingCursor(cursor);

// Setting ListView dengan data dari cursor dan menggunakan UI row.xml untuk display datanya

ListView listView = (ListView) findViewById(R.id.listView);
String[] from = { Settings.System.NAME, Settings.System.VALUE };
int[] to = { R.id.textName, R.id.textValue };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.layout.row, cursor, from, to);
listView.setAdapter(adapter);

Output dari program ini , Ketika anda klik button pada MainActivity maka ListView akan diisi dengan data informasi device Anda.

Selain ContentProvider yang sudah ada sebagai default. kita juga bisa membuat content provider sendiri.



Context


• The Context class provides global access to the applications environment

• Only class methods are used

   ▫ e.g. Context.getResources() returns all available resources in the application

• The context is used to do things like register handlers for broadcast messages, look up resources, access string tables, access the applications home directory and so on

• Activities are launched with Context.startActivity, services with Context.startService

• Messages can be sent to all BroadcastReceivers with sendBroadcast


Sumber: dari berbagai sumber

1 comment:

  1. Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. android ekranı video kaydetme

    ReplyDelete