Blog App di Android


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