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