Selasa, 29 Juni 2021

BAB 12 Pengenalan SQLite Pada Android Studio

      SQLite merupakan sebuah sistem manajemen basisdata relasional yang bersifat ACID-compliant dan memiliki ukuran pustaka kode yang relatif kecil, ditulis dalam bahasa C. Gampangnya, SQLite itu jenis database yang ringan dan tersedia dalam OS Android.

Langkah pertama jalankan Aplikasi IDE Android Studionya, dengan cara sebagai berikut :
  • Start > Android Studio
  • Pilih > Start a New Android Studio Project
  • Kemudian pilih > Empty Activity > Next

  • Name > Tugas12SQLite
  • Package Name > ubah menjadi nama blog kalian, exp.nenengevi07.blogspot.com lalu diikuti nama project kalian.
  • Save Lication D:\2021\semester6\ti2\ney Tugas 12
  • Minimum API Level > API 16 > Klik Finish
  • Ketikan kode-kode berikut pada 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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    android:background="#f5f5dc"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/lstTask"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
<RelativeLayout/>

  • Buat sebuah file layout dengan nama row.xml, nanti file ini digunakan untuk menampilkan isi kegiatan yang akan dilakukan dan disampingnya terdapat kolom hapus

  • Lalu ketikan kode program berikut ini pada file row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f5f5dc">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/task_title"
        android:text="Example"
        android:textSize="20sp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnDelete"
        android:text="HAPUS"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="deleteTask"/>
    
</RelativeLayout>

  • Setelah itu kita akan membuat Menu, caranya klik kanan pada folder res > New > Directory kemudian beri nama menu, seperti dibawah ini :

  • Setelah itu buat layout baru pada directory/folder menu dengan nama layout menu.xml dengan cara klik kanan pada folder Menu>New>Layour Resources File Beri nama menu.xml lalu ketikan program berikut ini
<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_add_task"
        android:icon="@android:drawable/ic_menu_add"
        android:title="Tambah Tugas "
        app:showAsAction="always" />

</menu>


  • Selanjutnya kita akan membuat class SQLiteOpenHelper dengan nama file DbHelper.java
  • SQLiteOpenHelper adalah sebuah sebclass, yang digunakan untuk menentukan nama database dan versi database yang sedang dipakai. Kita bisa menerapkan method di class ini exp :  OnCreate (SqliteDatabase) ,OnUpgrade (SqliteDatabase int int ) dan OnOpen(SqliteDatabase).
  • Buat sebuah class baru dengan nama DbHelper. Kemudian implementasikan kode-kode berikut pada DbHelper.java
nenengevi07.blogspot.todolist;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;

public class DbHelper extends SQLiteOpenHelper {
    private static final String DB_NAME="EDMTDev";
    private static final int DB_VER = 1;
    public static final String DB_TABLE="Task";
    public static final String DB_COLUMN="TaskName";
    public DbHelper(Context context){
        super(context, DB_NAME, null, DB_VER);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);",
                DB_TABLE,DB_COLUMN);
        db.execSQL(query);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String query = String.format("DELETE TABLE IF EXISTS %s",DB_TABLE);
        db.execSQL(query);
        onCreate(db);
    }
    public void insertNewTask(String task){ SQLiteDatabase db= this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(DB_COLUMN,task);
        db.insertWithOnConflict(DB_TABLE,null,values,SQLiteDatabase.CONFLICT_REPLACE);
        db.close(); } public void deleteTask(String task){ SQLiteDatabase db = this.getWritableDatabase();
        db.delete(DB_TABLE,DB_COLUMN + " = ?",new String[]{task});
        db.close(); } public ArrayList<String> getTaskList(){ ArrayList<String> taskList = new ArrayList<>();
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(DB_TABLE,new String[]{
                DB_COLUMN},null,null,null,null,null);
        while(cursor.moveToNext()){
            int index = cursor.getColumnIndex(DB_COLUMN);
            taskList.add(cursor.getString(index));
        }
        cursor.close();
        db.close();
        return taskList;
    }

  • Selanjutnya kita edit Pada MainActivty.java masukan kode-kode berikut ini. 
package nenengevi07.blogspot.todolist;

import android.content.DialogInterface;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    DbHelper dbHelper;
    ArrayAdapter<String> mAdapter;
    ListView lstTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DbHelper(this);
        lstTask = (ListView)findViewById(R.id.lstTask);
        loadTaskList();
    }
    private void loadTaskList() {
        ArrayList<String> taskList = dbHelper.getTaskList();
        if(mAdapter==null){
            mAdapter = new ArrayAdapter<String>(this,R.layout.row,R.id.task_title,taskList);
            lstTask.setAdapter(mAdapter);
        } else{ mAdapter.clear();
            mAdapter.addAll(taskList);
            mAdapter.notifyDataSetChanged();
        }
    }
    @Override public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
//Change menu icon color
        Drawable icon = menu.getItem(0).getIcon();
        icon.mutate();
        icon.setColorFilter(getResources().getColor(android.R.color.white), PorterDuff.Mode.SRC_IN);
        return super.onCreateOptionsMenu(menu);
    }
    @Override public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_add_task: final EditText taskEditText = new EditText(this);
                AlertDialog dialog = new AlertDialog.Builder(this)
                        .setTitle("Tambah Tugas")
                        .setMessage("Apa yang kamu ingin lakukan hari ini ?")
                        .setView(taskEditText)
                        .setPositiveButton("Tambah", new DialogInterface.OnClickListener() {
                                    @Override public void onClick(DialogInterface dialog, int which) {
                                        String task = String.valueOf(taskEditText.getText());
                                        dbHelper.insertNewTask(task);
                                        loadTaskList();
                                    }
                                }
                        )
                        .setNegativeButton("Batal",null)
                        .create();
                dialog.show();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void onBackPressed() {
        new AlertDialog.Builder(this)
                .setMessage("Apa kalian ingin Menutup Aplikasi ini?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        MainActivity.this.finish();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    } //untuk menutup Aplikasi SQLite
    public void deleteTask(View view){
        View parent = (View)view.getParent();
        final TextView taskTextView = (TextView)parent.findViewById(R.id.task_title);
        Log.e("String", (String) taskTextView.getText());
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setMessage("Apa Anda Yakin Ingin Menghapus ?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) //untuk notifikasi jika Note hendak diHAPUS  {
                        String task = String.valueOf(taskTextView.getText());
                        dbHelper.deleteTask(task);
                        loadTaskList();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }
}

  • Ubah nama aplikasi sesuai keinginan dengan cara merubah file string.xml yang ada dalam folder. . res/values seperti berikut ini :

<resources>
<string name=="app_name">Tugas12_NoteSQLite</string>
</resources>

  • Jika sudah selesai running aplikasinya pada emulator atau langsunh ke Hp kalian, seperti vidio dibawah ini


Rabu, 23 Juni 2021

BAB 11 Membuat WebView pada Android Studio



Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start >> Android Studio

b. Pilih >> Start a new Android Studio Project

c. Pilih >> Empty Activity >> Next

Configure Your Project

  • Name >> WebView
  • Package Name >> ubah menjadi nama blog kalian masing-masing, di sini saya menggunakan url blog saya nenengevi07.blogspot.com lalu di ikuti nama project WebView
  • Save Location >> D:\TI2\neneng_PAB
  • Language >> Java
  • Minimum API Level >> API 16>>Klik Finish
  • Siapkan sebuah File gambar dengan format file .png yang akan digunakan sebagai icon Apk Web view, lalu copy kedalam folder .../res/drawable/ seperti gambar dibawah ini :

  • Selanjutnya buat layout ketikan code program activity_main.xml seperti dibawah ini, aggar progres bar di layout ketika proses load website akan menampilkan icon loading 
<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/webView" />
    <ProgressBar
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="110dp"
        android:id="@+id/progressBar2" />
</RelativeLayout>

  • Buka dan ubah script MainActivity.java dan tambahkan script untuk memanggil url website, object class WebView, dan proses progress bar pada MainActivity.java 
packag nenengevi07.blogspot.com.webview;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    WebView webView;
    ProgressBar bar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        bar=(ProgressBar) findViewById(R.id.progressBar2);
        webView.setWebViewClient(new myWebclient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://nenengevi07.blogspot.com/");
    }
    public class myWebclient extends WebViewClient{
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            bar.setVisibility(View.GONE);
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
        @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if((keyCode==KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
            webView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}


  • Kemudian  dalam script AndroidManifest.xml seperti dibawah ini: 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nenengevi07.blogspot.com.webview">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/neneng"
        android:label="@string/app_name"
        android:roundIcon="@drawable/neneng"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  • Setelah itu coba kita jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti video dibawah ini


https://youtube.com/shorts/6K1fApr9Bzw?feature=share



Sabtu, 12 Juni 2021

BAB 10 MEMBUAT APPS MEDIA PLAYER DAN VIDEO PLAYER PADA ANDROID STUDIO

MediaPlayer

Salah satu komponen terpenting framework media adalah class MediaPlayer. Objek class ini dapat mengambil, mendekode, serta memutar audio dan video dengan sedikit penyiapan. Class ini mendukung beberapa sumber media yang berbeda, seperti:
• Resource lokal
• URI internal, seperti yang mungkin Anda peroleh dari Content Resolver
• URL eksternal (streaming)


Membuat App VidioPlayer 
 
1. Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start → Android Studio
b. Pilih → Start a new Android Studio Project

c. Pilih → Empty Activity → Next

Configure Your Project
Name → VidioPlayer
Package Name → ubah menjadi nama blog kalian masing-masing
Save Location → D:\2021\semester 6\TI-2\PAB\ VidioPlayer
Language → Java
Minimum API Level → API 14 → Klik Finish


2. Siapkan sebuah file Video dengan forma file, Buat sebuah direktori/folder engan nama raw di dalam folder ../res/raw dengan cara klik kanan pada folder res lalu pilih New – Directory seperti gambar di bawah ini
3. Copy file video yang telah kita siapkan tadi kedalam folder ../raw dengan cara klik kanan pada folder raw lalu pilih Show in Explore seperti gambar di bawah ini.
 Setelah itu akan tampil windows explorer lalu Paste di dalam folder raw file tadi.


4. Selanjutnya ketikan kode program / script activity_main.xml di bawah ini :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:padding="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="#FA8072"
    android:orientation="vertical">

    <TextView
        android:id="@+id/songName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textStyle="bold"
        android:layout_margin="20dp"
        android:textColor="#ffffff"
        android:text="Judul vidio"/>

    <VideoView
        android:id="@+id/vidioplay"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

    <TextView
        android:id="@+id/songDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#ffffff"
        android:text="Durasi vidio"/>

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="30dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal">

            <ImageButton
                android:id="@+id/btn_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="backforward"
                android:src="@android:drawable/ic_media_rew"/>

            <ImageButton
                android:id="@+id/btn_pause"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="pause"
                android:src="@android:drawable/ic_media_pause"/>

            <ImageButton
                android:id="@+id/btn_play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="play"
                android:src="@android:drawable/ic_media_play"/>

            <ImageButton
                android:id="@+id/btn_forward"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="forward"
                android:src="@android:drawable/ic_media_ff"/>
        </LinearLayout>
</LinearLayout>

5. Setelah itu Buka dan ubah script MainActivity.java seperti di bawah ini

package meilaniepu.blogspot.com.vidioplayer;

import android.content.res.AssetFileDescriptor;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import android.os.Handler;
import android.widget.VideoView;

import java.util.concurrent.TimeUnit;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private TextView songName, songDuration;
    private VideoView videoView;
    private SeekBar seekBar;
    private double timeStart= 0, finalTime = 0;
    private int forwardTime = 20000, backwardTime = 20000;
    private Handler durationHandler = new Handler();
    private boolean swtch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        songName = (TextView) findViewById(R.id.songName);
        songDuration =(TextView) findViewById(R.id.songDuration);
        mediaPlayer = MediaPlayer.create(this, R.raw.lawschool);
        MediaMetadataRetriever meta = new MediaMetadataRetriever();
        videoView = (VideoView) findViewById(R.id.vidioplay);
        String path = "android.resource://" + getPackageName() + "/" + R.raw.lawschool;
        videoView.setVideoURI(Uri.parse(path));

        seekBar = (SeekBar) findViewById(R.id.seekBar);
        songName.setText("Vidio.mp4");
        seekBar.setOnSeekBarChangeListener(new yourListener() );
        seekBar.setClickable(false);

    }
     private class yourListener implements SeekBar.OnSeekBarChangeListener {
         public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser){
             if (swtch){
                 videoView.seekTo(progress);
             }
         }
         public void onStartTrackingTouch(SeekBar seekBar) {
             swtch = true;
         }
         public void onStopTrackingTouch(SeekBar seekBar) {
             swtch = false;
         }
     }
     private Runnable updateSeekBarTime = new Runnable() {
        public void run(){
            timeStart = videoView.getCurrentPosition();
            seekBar.setProgress((int) timeStart);
            double timeRemaining = finalTime - timeStart;
            songDuration.setText(String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS. toMinutes((long) timeRemaining),
                    TimeUnit.MILLISECONDS. toSeconds((long) timeRemaining)-

                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
            durationHandler.postDelayed(this, 1000);

        }
     };
    public void play(View view){
        videoView.start();
        finalTime = videoView.getDuration();
        seekBar.setMax((int) videoView.getDuration());
        timeStart = videoView.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
        durationHandler.postDelayed(updateSeekBarTime, 1000);
    }
    public void pause(View view){
        videoView.pause();
    }
    public void forward(View view){
        timeStart = timeStart + forwardTime;
        videoView.seekTo((int) timeStart);
    }
    public void backforward(View view){
        timeStart = timeStart - backwardTime;
        videoView.seekTo((int) timeStart);
    }


}

6. Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti gabar dibawah ini



Membuat App MusicPlayer
Menggunakan API MediaPlayer

Langkah Awal sama seperti membuat VidioPlayer
1. Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start → Android Studio
b. Pilih → Start a new Android Studio Project
c. Pilih → Empty Activity → Next 
d. Configure Your Project

2. Siapkan sebuah file suara/musik dengan forma file .mp3 dan file gambar headphone dengan jenis file .png 

3. Buat sebuah direktori/folder engan nama raw di dalam folder ../res/raw dengan cara klik kanan pada folder res lalu pilih New – Directory seperti gambar di bawah ini


4. Copy file music.mp3 tadi kedalam folder ../raw dengan cara klik kanan pada folder raw lalu pilih Show in Explore seperti gambar di bawah ini. Setelah itu akan tampil windows explorer lalu Paste di dalam folder raw file music.mp3 tadi


5. Copy kan Kembali file headphone.png yang telah kita siapkan tadike dalam folder ../res/drawable/ sehingga akan tampil struktur project seperti gambar di bawah ini


6. Selanjutnya ketikan kode program / script activity_main.xml seperti di bawah ini

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="#0b00a3"
    android:orientation="vertical"
    android:padding="20dp">

    <TextView
        android:id="@+id/songName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Just as Usual"
        android:textColor="#ffffff"/>
    <ImageView
        android:id="@+id/mp3Icon"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_margin="30dp"
        android:background="#ffffff"
        android:padding="30dp"
        android:src="@drawable/headphone"/>
    <TextView
        android:id="@+id/songDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Durasi Lagu"
        android:textColor="#ffffff"/>
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="30dp"
        android:gravity="center_horizontal">
        <ImageButton
            android:id="@+id/btn_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="backforward"
            android:src="@android:drawable/ic_media_rew"/>
        <ImageButton
            android:id="@+id/btn_pause"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="pause"
            android:src="@android:drawable/ic_media_pause"/>
        <ImageButton
            android:id="@+id/btn_Play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:baselineAligned="false"
            android:onClick="play"
            android:src="@android:drawable/ic_media_play"/>
        <ImageButton
            android:id="@+id/btn_forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="forward"
            android:src="@android:drawable/ic_media_ff"/>
    </LinearLayout>
</LinearLayout>

7. Setelah itu Buka dan ubah script MainActivity.java seperti di bawah ini

package 07nenengevi.blogspot.musicplayer;

import android.content.res.AssetFileDescriptor;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import android.os.Handler;
import java.util.concurrent.TimeUnit;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private TextView songName, songDuration;
    private SeekBar seekBar;
    private double timeStart = 0, finaltime= 0;
    private int forwardtime = 20000, backwardTime = 20000;
    private Handler durationHadler = new Handler();
    private boolean swtch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        songName = (TextView) findViewById(R.id.songName);
        songDuration = (TextView) findViewById(R.id.songDuration);
        mediaPlayer = MediaPlayer.create(this, R.raw.music);

        MediaMetadataRetriever meta = new MediaMetadataRetriever();

        final AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.music);
        meta.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

        String music_duration = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        finaltime = Long.parseLong(music_duration);

        Log.v("musicDuration", "Duration : "+music_duration);

        seekBar =(SeekBar) findViewById(R.id.seekBar);
        songName.setText("Just as Usual.mp3");
        seekBar.setMax((int) finaltime);
        seekBar.setOnSeekBarChangeListener(new yourListener());
        seekBar.setClickable(false);
    }
    private class yourListener implements SeekBar.OnSeekBarChangeListener {
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (swtch){
                mediaPlayer.seekTo(progress);
            }
        }
        public void onStartTrackingTouch(SeekBar seekBar) {
            swtch = true;
        }
        public void onStopTrackingTouch(SeekBar seekBar) {
            swtch = false;
        }
}
private Runnable updateSeekBarTime = new Runnable() {
    @Override
    public void run() {
        timeStart = mediaPlayer.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
    double timeRemaining = finaltime - timeStart;
    songDuration.setText(String.format("%d min, %d sec",
        TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining),
        TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining)-
                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
    durationHadler.postDelayed(this, 1000);
         }
    };
    public void play(View view) {
        mediaPlayer.start();
        timeStart = mediaPlayer.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
        durationHadler.postDelayed(updateSeekBarTime, 100);
    }
    public void pause(View view) {
        mediaPlayer.pause();
    }
    public void forward(View view) {
        timeStart = timeStart + forwardtime;
        mediaPlayer.seekTo((int) timeStart);
    }
    public void backForward(View view) {
        timeStart = timeStart - backwardTime;
        mediaPlayer.seekTo((int) timeStart);
    }
}

8. Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio atau Hp anda maka akan tampil seperti gabar dibawah ini



Kamis, 10 Juni 2021

BAB 9 PENGENALAN ASYNCTASK DAN ASYNCTASKLOADER

AsyncTask

Gunakan kelas AsyncTask untuk mengimplementasikan tugas asinkron yang berjalan 
lama di thread pekerja. (Thread pekerja adalah thread yang bukan thread utama atau 
thread UI.) AsyncTask memungkinkan Anda menjalankan operasi latar belakang dan 
mempublikasikan hasil di thread UI tanpa memanipulasi thread atau penangan. Bila AsyncTask dieksekusi, maka akan melalui empat langkah:

1. onPreExecute( ) dipanggil di thread UI sebelum tugas dieksekusi. Langkah ini 
biasanya digunakan untuk mempersiapkan tugas, misalnya dengan menampilkan 
bilah kemajuan di UI.

2. doInBackground( Params. . . ) dipanggil pada thread latar belakang segera setelah 
onPreExecute( ) selesai. Langkah ini menjalankan komputasi latar belakang, 
mengembalikan hasil, dan meneruskan hasilnya ke onPostExecute( ) . Metode
doInBackground( ) juga bisa memanggil publishProgress( Progress. . . ) untuk 
mempublikasikan satu atau beberapa unit kemajuan.

3. onProgressUpdate( Progress. . . ) berjalan di thread UI setelah publishProgress( 
Progress. . . ) dipanggil. Gunakan onProgressUpdate( ) untuk melaporkan suatu 
bentuk kemajuan ke thread UI sewaktu komputasi latar belakang dieksekusi. 
Misalnya, Anda bisa menggunakannya untuk meneruskan data guna 
menganimasikan bilah kemajuan atau menampilkan log di bidang teks.

4. onPostExecute( Result) berjalan di thread UI setelah komputasi latar belakang 
selesai.

Untuk detail selengkapnya mengenai metode ini, lihat referensi AsyncTask . Di bawah ini adalah diagram urutan pemanggilan.

Penggunaan AsyncTask

Untuk menggunakan kelas AsyncTask , definisikan subkelas AsyncTask yang 
menggantikan metode doInBackground( Params. . . ) (dan biasanya juga metode 
onPostExecute( Result) ). Bagian ini menjelaskan parameter dan penggunaan AsyncTask , kemudian menampilkan contoh lengkap.


AsyncTaskLoader

AsyncTaskLoader adalah loader yang setara dengan AsyncTask. AsyncTaskLoader menyediakan metode,
loadInBackground( ), yang dijalankan di thread terpisah. HasilloadInBackground( ) secara otomatis dikirimkan ke thread UI, melalui onLoadFinished( ) LoaderManager callback.
Penggunaan AsyncTaskLoader
Untuk mendefinisikan subkelas AsyncTaskLoader , buat kelas yang memperluas AsyncTaskLoader<D> , dalam hal ini Dadalah tipe data yang sedang Anda muat. Misalnya, 
AsyncTaskLoader ini akan memuat daftar string: public static class StringListLoader extends 
AsyncTaskLoader <List<String>> {}
Berikutnya, implementasikan konstruktor yang cocok dengan implementasi super kelas: 
Konstruktor menggunakan konteks aplikasi sebagai argumen dan meneruskannya ke panggilan untuk super() . Jika loader Anda memerlukan informasi tambahan untuk 
melakukan pemuatan, konstruktor bisa mengambil argumen tambahan. Dalam contoh yang ditampilkan di bawah ini, konstruktor menggunakan sebuah istilah kueri.

public StringListLoader(Context context,
String queryString) {
super(context);
mQueryString = queryString;
}

Untuk melakukan pemuatan, gunakan metode penggantian loadInBackground( ) , akibat metode doInBackground( ) dari AsyncTask . Misalnya:

@Override
public List<String> loadInBackground() {
List<String> data = new ArrayList<String>;
//TODO: Load the data from the network or from a database
return data;
}


Pelaksanaan Praktikum 
1. Pertama jalankan aplikasi IDE Android Studio, caranya :

a. Pilih Start → Android Studio
b. Pilih → Start a new Android Studio Project
c. Pilih → Empty Activity → Next


Configure Your Project

Name → AsyncTaskDownload
Package Name → ubah menjadi nama blog kalian masing-masing
Save Location → D:\2021\semester 6\TI-2\PBO
Language → Java
Minimum API Level → API 14 → Klik Finish

2. Maka akan Tampil IDE Android Studio, setelah itu Buka dan ubah script
activity_main.xml menjadi seperti  di bawah ini

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10dp"
    android:paddingTop="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    tools:context=".MainActivity">

   <Button
       android:id="@+id/button1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Download" />

    <TextView
        android:id="@+id/attrs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="15dp"
        android:text="unggasid.com"
        android:textStyle="bold" />
    </RelativeLayout>

maka akan terlihat seperti ini:

3. Setelah itu Buka dan ubah script MainActivity.java menjadi seperti  di bawah ini :

package 07nenengevi.blogspot.com.asynctaskdownload;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.sql.Struct;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Environment;
import android.view.View;
import  android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import android.util.Log;

public class MainActivity extends AppCompatActivity implements OnClickListener {
    public static final int download_progress = 0;
    private String file_url = "http://dewiratnawati246.blogspot.com/wp-content/uploads/2021/Ringkasan-Tesis-Dewi-Ratnawati.pdf";
    Button btn_download;
    ProgressDialog prgDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_download = (Button) findViewById(R.id.button1);
        btn_download.setOnClickListener(this);
    }

    @Override
    public void onClick (View v) {
        if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED){
            Log.i("Permission", "Permission is Denied");
            ActivityCompat.requestPermissions(MainActivity.this,new String[] {
                    Manifest.permission.WRITE_EXTERNAL_STORAGE},101);
        }else{
            new DownloadFileAsync().execute(file_url);
        }
    }

    @Override
    protected Dialog onCreateDialog(int id){
        switch (id) {
            case download_progress:
            prgDialog = new ProgressDialog(this);
            prgDialog.setMessage("Download file...");
            prgDialog.setIndeterminate(false);
            prgDialog.setMax(100);
            prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            prgDialog.setCancelable(false);
            prgDialog.show();
            return prgDialog;
            default:
                return null;
        }
    }

    class DownloadFileAsync extends AsyncTask<String, Integer, String> {
        @Override
        protected  void onPreExecute() {
            showDialog(download_progress);
        }

        @Override
        protected String doInBackground(String... aurl) {
            Log.i("testing", "url download : " + aurl[0]);
            URL url = null;
            int count;
            try {
                url = new URL(aurl[0]);
                URLConnection conexion = url.openConnection();
                conexion.connect();
                Log.i("koneksi", "koneksi berhasil");
                int lenghtOfFile = conexion.getContentLength();
                Log.i("UkuranFile", "ukuran : " + String.valueOf(lenghtOfFile));
                InputStream input = new BufferedInputStream(url.openStream(), 10 * 1024);
                String fileName = conexion.getHeaderField("Content-Disposition");
                if (fileName == null || fileName.length() < 1) {
                    URL downloadeUrl = conexion.getURL();
                    fileName = downloadeUrl.getFile();
                    fileName = fileName.substring(fileName.lastIndexOf("/") * 1);
                } else {
                    fileName = URLDecoder.decode(fileName.substring(fileName.indexOf("filename=") + 9),
                      "UTF-8");
                    fileName = fileName.replaceAll("\"", "");
                }

                OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + "/Download/" + fileName);

                byte data[] = new byte[1024];
                long total = 0;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress((int) ((total * 100) / lenghtOfFile));
                    output.write(data, 0, count);
                }
                output.flush();
                output.close();
                input.close();

            } catch (Exception e) {
                e.printStackTrace();
                Log.d("koneksi", "koneksi gagal");
            }

            return null;
        }

        protected  void  onProgressUpdate(Integer... progress) {
            prgDialog.setProgress(progress[0]);
        }
        protected  void  onPostExecute(String result) {
            dismissDialog(download_progress);
            Toast.makeText(getApplicationContext(),"Download complete. File in /sdcard/Donwload", Toast.LENGTH_SHORT).show();
        }
    }
}

4. Buat sebuah file xml baru dengan Nama network_security_config.xml di dalam
folder /res/xml 

dan ketikan kode program berikut seperti di bawah ini :
<?xml version="1.0" encoding="utf-8"?>
<network-security-config
    xmlns:android="http://schemas.android.com/apk/res/android">
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
File ini digunakan agar aplikasi bisa mengakses url yang tanpa SSL (url https), dan struktur nya sendiri akan menjadi seperti gambar di bawah in

5. Sesuaikan script AndroidManifest.xml seperti di bawah ini untuk mendaftarkan 
komponen Intent Filter dan mendaftarkan permission akses internet & write external storage yang kita butuhkan
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="dewiratnawati246.blogspot.com.asynctaskdownload">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application
        android:requestLegacyExternalStorage="true"
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

6. Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti gabar dibawah ini





Aplikasi akan meminta akses ke media penyimpanan anda, pilih izinkan selanjutnya tekan tombol download Kembali maka progress download akan terlihat di layer.

Kamis, 03 Juni 2021

BAB 8 Pengenalan Explicit Intent dan Implicit Intent


Terdapat 2 model Intent dalam pemrograman Android yaitu:

a) Explicit Intent berfungsi untuk mengaktifkan komponen-komponen dalam satu 
aplikasi yang sama. Misalnya seperti : Berpindah Activity.

b) Implicit Intent berfungsi untuk memanggil fungsi activity yang sudah ada di fungsi 
internal android seperti Dial Number, Open Browser dan lainnya.

Fungsi Intent

a) Untuk berpindah halaman dari satu Activity ke Activity lain. Contohnya : Kita membuat aplikasi dengan 3 Activity. Activity utama berisi tombol informasi dan login. Ketika tombol informasi di klik akan tampil activity informasi begitupun dengan tombol login ketika di klik akan menampilkan activity login.

b) Untuk transfer data dari satu Activity ke Activity lain. Contohnya : Pada saat kita mengisi data pada Activity login maka nanti akan ditampilkan informasinya pada Activity infomasi user.

c) Untuk memanggil activity pada internal android seperti Melakukan Dial Number, 
Open Email ataupun lainnya.

Intent merupakan sebuah mekanisme yang digunakan untuk melakukan sebuah aksi dari komponen aplikasi. Untuk dapat melakukan sebuah aksi pada sebuah intent, ada 3 cara yang dapat dilakukan:

1) Menjalankan sebuah activity lain baik dengan data ataupun tanpa data

2) Membuat sebuah service untuk menjalankan pekerjaan tertentu pada sebuah background/non main thread.

3) Mengirimkan sebuah broadcast. Pesan yang dikirimkan dalam keadaan tertentu, misalkan ketika booting atau sedang melakukan pengisian data baru mengirimkan data.

Explicit Intent

Explicit intent digunakan untuk memanggil Activity lain yang masih dalam satu project ataupun berbeda. Pemanggilan Intent secara explicit dengan menentukan nama Activity tujuan. Intent membutuhkan dua parameter, yang pertama adalah Context (dapat didapatkan dari Activity atau Application) dan berikutnya adalah nama NamaActivity.class.

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);


pada contoh berikut ini, kita akan membuat sebuah Apps dengan menggunakan fungsi intent explicit, langkahnya seperti berikut ini:

1. Pertama jalankan aplikasi IDE Android Studio, caranya :

a. Pilih Start -> Android Studio
b. Pilih > Start a new Android Studio Project
c. Pilih > Empty Activity > Next 
Configure Your Project

Maka akan Tampil IDE Android Studio, setelah itu Buka dan ketikan script
activity_main.xml seperti codingan dibawah ini :

<?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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_header_reply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_header_reply"
android:visibility="invisible"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"/>

    <TextView
        android:id="@+id/text_message_reply"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_header_reply"
        android:visibility="invisible"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginStart="@dimen/activity_horizontal_margin"
android:textAppearance="?android:attr/textAppearanceMedium"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_main"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="launchSecondActivity"/>
    <EditText
android:id="@+id/editText_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/button_main"
        android:layout_toStartOf="@+id/button_main"
        android:hint="@string/editText_main"/>
</RelativeLayout>


Setelah itu Buka dan ubah script MainActivity.java menjadi Seperti ini:

package com.example.intenteksplisit;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private static final String LOG_TAG = MainActivity.class.getSimpleName();
    public static final String EXTRA_MESSAGE = "com.example.intenteksplisit.extra.MESSAGE";
    public static final int TEXT_REQUEST = 1;

    private EditText mMessageEditText;
    private TextView mReplyHeadTextView;
    private TextView mReplyTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMessageEditText = (EditText) findViewById(R.id.editText_main);
        mReplyHeadTextView = (TextView) findViewById(R.id.text_header_reply);
        mReplyTextView = (TextView) findViewById(R.id.text_message_reply);
    }
    public void launchSecondActivity(View view){
        Log.d(LOG_TAG, "Button clicked");

        Intent intent = new Intent(this, activity_second.class);
        String message = mMessageEditText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivityForResult(intent,TEXT_REQUEST);
    }
    public void onActivity(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode,data);

        if (requestCode == TEXT_REQUEST){
            if (resultCode == RESULT_OK){
                String reply = data.getStringExtra(activity_second.EXTRA_REPLY);
                mReplyHeadTextView.setVisibility(View.VISIBLE);
                mReplyTextView.setText(reply);
                mReplyTextView.setVisibility(View.VISIBLE);
            }
        }
    }
}
  

Buat sebuah Activity baru dengan Nama SecondActivity dengan cara seperti gambar di bawah ini 

Selanjutnya Buka dan ubah script activity_second.xml menjadi seperti bawah ini :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_hotizontal_margin"
    android:paddingRight="@dimen/activity_hotizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".activity_second">

    <TextView
        android:id="@+id/text_header"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text_header"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold"/>
    <TextView
android:id="@+id/text_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_header"
        android:layout_marginLeft="@dimen/activity_hotizontal_margin"
        android:layout_marginStart="@dimen/activity_hotizontal_margin"
android:textAppearance="?android:attr/textAppearanceMedium"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_second"
android:id="@+id/button_second"
   android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="returbReply"/>
    <EditText
        android:id="@+id/editText_second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/button_second"
        android:layout_toStartOf="@+id/button_second"
        android:hint="@string/editText_second"/>
</RelativeLayout>


Selanjutnya Buka dan ubah script SecondActivity.java menjadi seperti dibawah ini :

package com.example.intenteksplisit;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class activity_second extends AppCompatActivity {
    public static final String EXTRA_REPLY ="com.example.intenteksplisit.extra.REPLY";
    private EditText mReply;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        mReply = (EditText) findViewById(R.id.editText_second);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        TextView textView = (TextView) findViewById(R.id.text_message);
        if (textView !=null){
            textView.setText(message);
        }
    }
    public void returnReply(View view){
        String reply = mReply.getText().toString();
        Intent replyIntent = new Intent();
        setResult(RESULT_OK, replyIntent);
        finish();
    }
}

Setelah itu Buka dan ubah script String.xml menjadi seperti di bawah ini

<resources>
    <string name="app_name">IntentEksplisit</string>
    <string name="text_header_reply"></string>
    <string name="button_main"></string>
    <string name="editText_main"></string>
    <string name="text_header"></string>
    <string name="button_second"></string>
    <string name="editText_second"></string>
</resources>

Buat file dimens.xml di dalam folder Res/Values lalu ketikan script nya seperti 
dibawah ini 
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="activity_vertical_margin"></dimen>
    <dimen name="activity_hotizontal_margin"></dimen>
</resources>

Sesuaikan script AndroidManifest.xml seperti di bawah ini untuk mendaftarkan 
komponen Intent Filter yang ada 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example intenteksplisit">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".activity_second"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Lalu coba jalankan menggunakan emulator yang ada tersedia di Android Studio Anda,
maka akan tampil seperti gabar dibawah ini :

Ketika nama kemudian klik SEND maka akan seperti gambar dibawah ini



Implicit Intent

Intent Implisit adalah Intent yang tidak memiliki target dan melempar tugas ke 
aplikasi lainnya. Intent jenis ini mengirim pesan dan permintaan, lalu System Android akan mencari aplikasi yang dapat mengabulkan permintaan Intent. Aplikasi yang siap akan 
menangkap tugas yang diberikan menjalankan tugas.Gambaran Sorce code dari intent implisit, Source di dibawah ini dapat memanggil 
komponen browser untuk URL tertentu menggunakan intent. 

Intent intent = new Intent(Intent.ACTION_VIEW, 
Uri.parse("http://www.unggasid.com"));
startActivity(intent);

Aplikasi yang umum digunakan antara lain:
 Call
 Dialpad
 Contact
 Browser
 Call Log
 Gallery
 Camera
Sebagai contoh pemanggilan Gallery yang berisi gambar, dapat dilihat pada kode berikut.

Intent intent = new 
Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CO
NTENT_URI);

pada contoh berikut ini, kita akan membuat sebuah Apps dengan menggunakan fungsi intent implicit, langkahnya seperti berikut ini:

1. Pertama jalankan aplikasi IDE Android Studio, caranya :

a. Pilih Start > Android Studio
b. Pilih > Start a new Android Studio Project



c. Pilih > Empty Activity > Next 
Configure Your Project

Name : ImplicitIntents
Package Name : ubah menjadi nama blog kalian masing-masing, disini saya menggunakan blog bawaan com.example.implisitintents
Save Location :  D:\Implisit
Language : Java
Minimum API Level : API 16 > Klik Finish


Maka akan Tampil IDE Android Studio, setelah itu Buka dan ubah script string.xml menjadi seperti di bawah ini :

<resources>
    <string name="app_name">ImplisitIntents</string>
    <string name="edittext_url">https://07nenengevi.blogspot.com</string>
    <string name="button_url">Open Website</string>
    <string name="edittext_loc">Stikom-Poltek Cirebon.com</string>
    <string name="button_loc">Open Location</string>
    <string name="edittext_share">Belajar Android</string>
    <string name="button_share">Share This Text</string>

</resources>

Setelah itu Buka dan ubah script activity_main.xml menjadi seperti di bawah ini

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margim"
    android:paddingLeft="@dimen/activity_horizontal_margim"
    android:paddingRight="@dimen/activity_horizontal_margim"
    android:paddingTop="@dimen/activity_vertical_margim"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/website_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button_url"/>

    <Button
        android:id="@+id/open_website_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="24dp"
        android:onClick="openWebsite"
        android:text="@string/edittext_loc"/>

    <EditText
        android:id="@+id/location_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/edittext_loc"/>

    <Button
        android:id="@+id/open_location_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="24dp"
        android:text="@string/button_loc"/>

    <EditText
        android:id="@+id/share_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/edittext_share"/>

    <Button
        android:id="@+id/share_text_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="24dp"
        android:onClick="shareText"
        android:text="@string/button_share"/>


</LinearLayout>

Selanjutnya Buka dan ubah script AndroidManifest.xml untuk mendaftarkan 
komponen Intent filter menjadi seperti dibawah ini

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.implisitintents">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="http"
                 android:host="developer.android.com"/>
            </intent-filter>

        </activity>
    </application>

</manifest>

Buat file dimens.xml di dalam folder Res/Values lalu ketikan script nya seperti 
dibawah ini
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="activity_horizontal_margim">16dp</dimen>
    <dimen name="activity_vertical_margim">16dp</dimen>
</resources>

Selanjutnya ubah script MainActivity.java menjadi seperti di bawah ini

package com.example.implisitintents;

import android.content.Intent;
import android.os.Bundle;
import android.net.Uri;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ShareCompat;

public class MainActivity extends AppCompatActivity {

    private EditText mWwebsiteEditText;
    private EditText mLocationEditText;
    private EditText mShareTextEditText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWwebsiteEditText = (EditText) findViewById(R.id.website_edittext);
        mLocationEditText = (EditText) findViewById(R.id.location_edittext);
        mShareTextEditText = (EditText) findViewById(R.id.share_edittext);
    }

    public void openWebsite(View view) {
        String url = mWwebsiteEditText.getText().toString();
        Uri webpage = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW,webpage);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        } else {
            Log.d("ImplicitIntents", "Can't handle this intent");
        }
    }

    public void openLocation(View view) {
        String loc = mLocationEditText.getText().toString();
        Uri addressUri = Uri.parse("geo:0,0?q="+loc);
        Intent intent = new Intent(Intent.ACTION_VIEW,addressUri);
        if (intent.resolveActivity(getPackageManager())!=null) {
            startActivity(intent);
        } else {
            Log.d("ImplicitIntents", "Can't handle this intents!");
        }

    }
    public void shareText(View view) {
        String loc = mShareTextEditText.getText().toString();
        String mimeType = "text/plain";
        ShareCompat.IntentBuilder
                .from(this)
                .setType(mimeType)
                .setChooserTitle("Share this text with:")
                .setText("txt")
                .startChooser();
    }
}

Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti gabar dibawah ini


Ketika kita tekan tombol OPEN WEBSITE maka akan tampil web browser seperti 
gambar di bawah ini



Ketika kita tekan tombol SHARE THIS TEXT maka akan tampil pilihan Apps yang dapat melakukan share dalam system default android seperti gambar di bawah ini

BAB 13 CRUD Database MySQL dengan PHP Pada Apk Android Studio

CRUD adalah singkatan dari create, read, update, and delete. Akronim CRUD mengidentifikasi semua fungsi utama yang melekat pada database re...