Yang
punya blog dengan pembaca yang setia tentunya ingin memberikan
sesuatu yang lebih kepada pembaca dengan menampilkan blog tersebut
pada aplikasi Android, bukan sekedar tampil di browser mobile, hal
ini ada beberapa keuntungan, selain memberikan pendekatan lebih
kepada pembaca, memberikan informasi artikel terupdate melalui rss
feed dan juga ada harapan untuk tambahan penghasilan dari Admob, jika
aplikasi Blog App ini dipasang Admob. Selain menampilkan blog online,
Blog App ini bisa juga menampilkan data secara offline (data
berbentuk HTML) ini dimaksudkan agar tidak kehilangan pembaca pada
saat offline, walaupun sedang offline pembaca masih bisa membaca data
yang offline. Berikut basic source code untuk blog app dan data HTMLoffline:
private WebView webView;
private String extStorageDirectory = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CreateCacheDirectory();
webView = (WebView) findViewById(R.id.webView1);
startWebView("http://andevid.blogspot.com/");
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("SetJavaScriptEnabled")
private void startWebView(String url) {
webView.setWebViewClient(new WebViewClient() {
ProgressDialog progressDialog;
//If you will not use this method url links are open in new browser not in webview
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null) {
if (url.startsWith("http") && !url.contains("andevid.blogspot")) {
//load in default browser
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
view.getContext().startActivity(intent);
} else {
//load in webview
view.loadUrl(url);
}
return true;
} else {
return false;
}
}
//Show loader on url load
public void onLoadResource (WebView view, String url) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage(view.getContext().getString(R.string.loading_text));
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
}
}
public void onPageFinished(WebView view, String url) {
if (progressDialog != null) {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// jika memuat blog yang online error atau offline data ini yang dimuat
Log.e("webview", "onReceivedError: " + description);
webView.loadUrl("file:///android_asset/www/index.html");
Toast.makeText(getBaseContext(), getString(R.string.load_error), Toast.LENGTH_SHORT).show();
}
});
// Javascript enabled on webview
webView.getSettings().setJavaScriptEnabled(true);
// Other webview options
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
// The DEFAULT location for the cache
webView.getSettings().setAppCachePath(extStorageDirectory
+ "/Andevid/MyApps/cache/InfoAndDev");
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
webView.getSettings().setSupportMultipleWindows(false);
webView.getSettings().setSupportZoom(true);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
// Use the API 11+ calls to disable the controls
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
}
//webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
//webView.setScrollbarFadingEnabled(false);
webView.setWebChromeClient(new WebChromeClient());
//Load url in webview
webView.loadUrl(url);
}
public void CreateCacheDirectory() {
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
extStorageDirectory = Environment.getExternalStorageDirectory()
.toString();
// Create a Folder object for the parent directory
File cacheDirectory = new File(extStorageDirectory
+ "/Andevid/MyApps/cache/InfoAndDev");
// Have the object build the folder if needed.
cacheDirectory.mkdirs();
} else if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED_READ_ONLY)) {
//Alerts.sdCardMissing(this);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//super.onCreateOptionsMenu(menu);
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
showAboutDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
// untuk menampilkan dialog About dari menu
protected void showAboutDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.app_name);
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage(R.string.about_text);
builder.setCancelable(false);
builder.setPositiveButton(getString(R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
@Override
public void onBackPressed() {
// memeriksa jika tombol Back ditekan dan ada history di webview
if(webView.canGoBack()) {
webView.goBack();
//webView.clearHistory();
} else {
super.onBackPressed();
}
}
/** Called before the activity is destroyed. */
@Override
public void onDestroy() {
webView.destroy();
super.onDestroy();
}
Full project bisa
didownload di Github Andevid.
Untuk rss feed
blogger nanti saya cari dulu untuk artikel selanjutnya.
Level: Beginner
No comments:
Post a Comment