Ayhan 24 Ağustos 2014 Android

Herkese Merhaba

Bu projede Android programlarınızda kullanmak üzere bir Twitter uygulaması geliştirecez. Öncelikle bu uygulama için

https://apps.twitter.com/app/new

Adresinden bir uygulama oluşturmanız gerekiyor. Bunun için aşağıdaki şekilde ilerleyebilirsiniz.
kayıt


Projeyi oluşturduktan sonra proje ile ilgili izinlerinizi oluşturmalısınız. 3 farklı izin var.Okuyarak size uygun olanı seçersiniz. Burada unutulmaması gereken nolta, gerekmeyen izinleri istemek kullanıcı da şüphe uyandıracağıdır. Bu nedenle gerekli izinleri alınız.
izin

Artık projenizin ayarları neredeyse tamam.İstersen projenize icon atayabilirsiniz. Artık projemizde kullanacağmız API_key ve API_secret değerlerini almalıyız.Bunlar aşağıda gösterdiğim bölgede.
api_key

Artık kodlamaya gelebiliriz. Öncelikle yapacaklarımızı belirtmek gerek. Bu proje sonunda Twitter hesabınızla prgrama giriş yapabileceğz.Girdiğimiz ekranda tweet butonu ile weet atabileceğiz.Istersk çıkış yapabileceğiz. Ancak projede bir çok dosya bulunduğu için ben size beliri dosyaları yazacağım.Tüm dosyaları Github hesabımdan alabilirsiniz. Eğer o da ne nasıl kullanılıyor diyorsanız,bir sonraki yazımı merakla beklemelisiniz.

İlk olarak programlamayı yapabilmek için bizim adımza kütüphane oluşturan Twitter4j sitesinden gerekli dökümanları edinmemiz gerekir.Tabii ki ben sizin yerinize bu projede kullanılacak kısımları edindim ve Github üzerinde bulacaksınız. Ama sizin yineden göz atmanızda fayda var. Bu Twiter4j kütüphanelerinden,biz projemizde twitter4j-core-4.0.2.jar kütüphanemizi kullanacağız.

Öncelikle Android Studio üzerinden bir yeni proje oluşturalım. Daha sonra da bu twitter4j-core-4.0.2.jar dosyasını proje dosyaları içindeki lib klasörüne atıyoruz. Sonra Android Studio açıyoruz.Sol panelde lib sekmesini açıyoruz ve twitter4j-core-4.0.2.jar orada gözüküyor.Yapmanız gereken dosya üzerine sağ tıklayıp alttan 2. sekmedeki Add as Library seçeneğini seçiyoruz. Artık twitter için gerekli dosyalar kullanımımıza açımış oldu. Artık herşey programlamaya geldi.

İlk olarak Manifest dosyamızı ayarlayalım ki unutmalara karşı önlemimizi alalım. Çünkü genelde bu dosyanın güncellemesi unutuluyor ve bizi uğraştırıyor.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.ayhankorkmaz.twitterayhan"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="16" />

    <uses-permission android:name="android.permission.INTERNET" />


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

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

</manifest>

Bu dosyada dikkat edilmesi gereken nokta internet iznini almamızdır. Onu da aşağıdaki gibi alıyoruz

 <uses-permission android:name="android.permission.INTERNET" />

Bundan sonrai adımda Ara yüz tasarımlarımızı apacağız.Ben burada bir tanesini yapacağım.Geri kalanını Github üzerinden alacaksınız zaten.

login_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/login"
        android:layout_width="400sp"
        android:layout_height="100sp"
        android:layout_gravity="center"
        android:src="@drawable/login_button" />
    <LinearLayout
        android:layout_width="400sp"
        android:layout_height="100sp">
        <FrameLayout
            android:layout_width="400sp"
            android:layout_height="100sp">

        </FrameLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="400sp"
        android:layout_height="30sp">
        <TextView
            android:layout_width="400sp"
            android:layout_height="30sp"
            android:id="@+id/takipet"
            android:textSize="20sp"
            android:textColor="@color/Black"
            android:background="@color/Gainsboro"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="400sp"
        android:layout_height="100sp"
        android:orientation="horizontal"
        android:layout_gravity="center"
        android:gravity="center"
        >
        <LinearLayout
            android:layout_width="210sp"
            android:layout_height="100sp"
            android:layout_gravity="center"
            android:orientation="horizontal"
            android:gravity="center"
            >
            <ImageButton
                android:id="@+id/follow"
                android:layout_width="70sp"
                android:layout_height="70sp"
                android:background="@drawable/twitter_icon"/>
            <ImageButton
                android:id="@+id/blog"
                android:layout_width="70sp"
                android:layout_height="70sp"
                android:background="@drawable/wordpress"/>
            <ImageButton
                android:id="@+id/github"
                android:layout_width="70sp"
                android:layout_height="70sp"
                android:background="@drawable/git"/>

        </LinearLayout>


    </LinearLayout>


</LinearLayout>

Bu kısımda ilk ekranımızı tasarladık. Bu ekranda Login butonumuz bulunacak. Kodları incelediğinizde düzeni sağamak için iç içe LineerLayout kulandığımı göreceksiniz.Diğer yandan da kulandığım tüm değerleri birer dosya ile temsil ettim.Renkler için ouşturduğum color.xml içerisinden rek değerlerini aldım.

Bu adımdan sonra gerekli Java kodlarımızı ekliyorum. Geri kalan tüm dosyaları toplu indirmeden alacaksınız.

MainActivity.java

package net.ayhankorkmaz.twitterayhan;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.SharedPreferences;

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;

public class MainActivity extends Activity {
	
	SharedPreferences pref;

    //Tweeter üzerinden ouşturacağıız API le gelen KEY ve SECRET buraya yazin
    private static String API_key = "oxFLxPHVdnc5ZfIzPfQlYSd8I";
    private static String API_secret = "AYIiThOXM4JdDqTTCuWUHDDYaJyoBq6MrPJofReh9HV2CoFG9S";
  

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

        pref = getPreferences(0);
        SharedPreferences.Editor edit = pref.edit();
        edit.putString("API_key", API_key);
        edit.putString("API_secret", API_secret);
        edit.commit();  

		Fragment login = new LoginFragment();
        FragmentTransaction ft = getFragmentManager().beginTransaction();	              
        ft.replace(R.id.content_frame, login);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);
        ft.commit();
	}


}



LoginFragment.java

package net.ayhankorkmaz.twitterayhan;


import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import android.app.Dialog;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class LoginFragment extends Fragment {
    ImageView login;
    Twitter twitter;
    RequestToken requestToken = null;
    AccessToken accessToken;
    String oauth_url,oauth_verifier,profile_url;
    Dialog auth_dialog;
    WebView web;
    SharedPreferences pref;
    ProgressDialog progress;
    Bitmap bitmap;
    ImageButton follow;
    ImageButton blog;
    ImageButton github;
    TextView takipet;


    
   @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.login_fragment, container, false);
        login = (ImageView)view.findViewById(R.id.login);
       follow =(ImageButton) view.findViewById(R.id.follow);
       blog =(ImageButton) view.findViewById(R.id.blog);
       github =(ImageButton) view.findViewById(R.id.github);
       takipet =(TextView) view.findViewById(R.id.takipet);
       takipet.setText("  Beni aşağıdaki platformlardan takip edin!");

         pref = getActivity().getPreferences(0);
 		twitter = new TwitterFactory().getInstance();
 	   twitter.setOAuthConsumer(pref.getString("API_key", ""), pref.getString("API_secret", ""));
       follow.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {

               Intent browserIntent =
                       new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/intent/follow?original_referer=&region=follow_link&screen_name=ayhankorkmaz_&tw_p=followbutton&variant=2.0"));
               startActivity(browserIntent);

           }

       });
       blog.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {

               Intent browserIntent =
                       new Intent(Intent.ACTION_VIEW, Uri.parse("http://ayhankorkmaz.net"));
               startActivity(browserIntent);

           }

       });
       github.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {

               Intent browserIntent =
                       new Intent(Intent.ACTION_VIEW, Uri.parse("http://github.com/ayhankorkmaz"));
               startActivity(browserIntent);

           }

       });

        login.setOnClickListener(new LoginProcess());
        return view;
    }
    private class LoginProcess implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			new TokenGet().execute();
			
		}}
    
    private class TokenGet extends AsyncTask<String, String, String> {
        
        @Override
        protected String doInBackground(String... args) {
     	   
     	   try {
   			   requestToken = twitter.getOAuthRequestToken();
   			   oauth_url = requestToken.getAuthorizationURL();
   		} catch (TwitterException e) {
   			// TODO Auto-generated catch block
   			e.printStackTrace();
   		}
                      return oauth_url;
        }
         @Override
         protected void onPostExecute(String oauth_url) {
        	 if(oauth_url != null){
         	Log.e("URL", oauth_url);
         	auth_dialog = new Dialog(getActivity());
            auth_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

             auth_dialog.setContentView(R.layout.auth_dialog);
             web = (WebView)auth_dialog.findViewById(R.id.webv);
             web.getSettings().setJavaScriptEnabled(true);
             web.loadUrl(oauth_url);
             web.setWebViewClient(new WebViewClient() {
                   boolean authComplete = false;
                   @Override
                   public void onPageStarted(WebView view, String url, Bitmap favicon){
                    super.onPageStarted(view, url, favicon);
                   }
               
                   @Override
                   public void onPageFinished(WebView view, String url) {
                       super.onPageFinished(view, url);
                       if (url.contains("oauth_verifier") && authComplete == false){
                    	   authComplete = true;
                     	  Log.e("Url",url);
                     	  Uri uri = Uri.parse(url);
                           oauth_verifier = uri.getQueryParameter("oauth_verifier");
                                                     
                   auth_dialog.dismiss();
                   new AccessTokenGet().execute();
                   }else if(url.contains("denied")){
                       auth_dialog.dismiss();
                       Toast.makeText(getActivity(), "Pardon!, İzin alınamadı", Toast.LENGTH_SHORT).show();

                	   
                   }
                       }
               });
             auth_dialog.show();
             auth_dialog.setCancelable(true);
            
     	
            
         }else{
        	 
                 Toast.makeText(getActivity(), "Opps!, Bağlantı hatası veya program ayarlarında hata var", Toast.LENGTH_SHORT).show();

            
         }
         }
    }
    
    private class AccessTokenGet extends AsyncTask<String, String, Boolean> {
    	
    	
    	@Override
        protected void onPreExecute() {
            super.onPreExecute();
            progress = new ProgressDialog(getActivity());
            progress.setMessage("Bilgiler alınıyor ...");
            progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progress.setIndeterminate(true);
            progress.show();
            
    }
        
    	
	       @Override
	       protected Boolean doInBackground(String... args) {
	    	   
	    	   try {
	    		  

	    		 accessToken = twitter.getOAuthAccessToken(requestToken, oauth_verifier); 		   
	    		 SharedPreferences.Editor edit = pref.edit();
                 edit.putString("ACCESS_TOKEN", accessToken.getToken());
                 edit.putString("ACCESS_TOKEN_SECRET", accessToken.getTokenSecret());
                 User user = twitter.showUser(accessToken.getUserId());
                  profile_url = user.getOriginalProfileImageURL();
                 edit.putString("NAME", user.getName());
                 edit.putString("IMAGE_URL", user.getOriginalProfileImageURL());
                 edit.putString("takipci",Integer.toString(user.getFollowersCount()));

                 edit.commit();  
	    		    
	           
			} catch (TwitterException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				
				
			}	    	
	    	   
	                     return true;
	       }
	        @Override
	        protected void onPostExecute(Boolean response) {
	        	if(response){
	                  progress.hide();
	        		  Fragment profile = new ProfileFragment();
	                  FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();	              
	                  ft.replace(R.id.content_frame, profile);
	                  ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
	                  ft.addToBackStack(null);
	                  ft.commit();

	        	}
	        	}
	        
	        	
	        }
	   }
    
    

ProfileFragment.java

package net.ayhankorkmaz.twitterayhan;


import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import android.app.Dialog;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class LoginFragment extends Fragment {
    ImageView login;
    Twitter twitter;
    RequestToken requestToken = null;
    AccessToken accessToken;
    String oauth_url,oauth_verifier,profile_url;
    Dialog auth_dialog;
    WebView web;
    SharedPreferences pref;
    ProgressDialog progress;
    Bitmap bitmap;
    ImageButton follow;
    ImageButton blog;
    ImageButton github;
    TextView takipet;


    
   @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.login_fragment, container, false);
        login = (ImageView)view.findViewById(R.id.login);
       follow =(ImageButton) view.findViewById(R.id.follow);
       blog =(ImageButton) view.findViewById(R.id.blog);
       github =(ImageButton) view.findViewById(R.id.github);
       takipet =(TextView) view.findViewById(R.id.takipet);
       takipet.setText("  Beni aşağıdaki platformlardan takip edin!");

         pref = getActivity().getPreferences(0);
 		twitter = new TwitterFactory().getInstance();
 	   twitter.setOAuthConsumer(pref.getString("API_key", ""), pref.getString("API_secret", ""));
       follow.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {

               Intent browserIntent =
                       new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/intent/follow?original_referer=&region=follow_link&screen_name=ayhankorkmaz_&tw_p=followbutton&variant=2.0"));
               startActivity(browserIntent);

           }

       });
       blog.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {

               Intent browserIntent =
                       new Intent(Intent.ACTION_VIEW, Uri.parse("http://ayhankorkmaz.net"));
               startActivity(browserIntent);

           }

       });
       github.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {

               Intent browserIntent =
                       new Intent(Intent.ACTION_VIEW, Uri.parse("http://github.com/ayhankorkmaz"));
               startActivity(browserIntent);

           }

       });

        login.setOnClickListener(new LoginProcess());
        return view;
    }
    private class LoginProcess implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			new TokenGet().execute();
			
		}}
    
    private class TokenGet extends AsyncTask<String, String, String> {
        
        @Override
        protected String doInBackground(String... args) {
     	   
     	   try {
   			   requestToken = twitter.getOAuthRequestToken();
   			   oauth_url = requestToken.getAuthorizationURL();
   		} catch (TwitterException e) {
   			// TODO Auto-generated catch block
   			e.printStackTrace();
   		}
                      return oauth_url;
        }
         @Override
         protected void onPostExecute(String oauth_url) {
        	 if(oauth_url != null){
         	Log.e("URL", oauth_url);
         	auth_dialog = new Dialog(getActivity());
            auth_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

             auth_dialog.setContentView(R.layout.auth_dialog);
             web = (WebView)auth_dialog.findViewById(R.id.webv);
             web.getSettings().setJavaScriptEnabled(true);
             web.loadUrl(oauth_url);
             web.setWebViewClient(new WebViewClient() {
                   boolean authComplete = false;
                   @Override
                   public void onPageStarted(WebView view, String url, Bitmap favicon){
                    super.onPageStarted(view, url, favicon);
                   }
               
                   @Override
                   public void onPageFinished(WebView view, String url) {
                       super.onPageFinished(view, url);
                       if (url.contains("oauth_verifier") && authComplete == false){
                    	   authComplete = true;
                     	  Log.e("Url",url);
                     	  Uri uri = Uri.parse(url);
                           oauth_verifier = uri.getQueryParameter("oauth_verifier");
                                                     
                   auth_dialog.dismiss();
                   new AccessTokenGet().execute();
                   }else if(url.contains("denied")){
                       auth_dialog.dismiss();
                       Toast.makeText(getActivity(), "Pardon!, İzin alınamadı", Toast.LENGTH_SHORT).show();

                	   
                   }
                       }
               });
             auth_dialog.show();
             auth_dialog.setCancelable(true);
            
     	
            
         }else{
        	 
                 Toast.makeText(getActivity(), "Opps!, Bağlantı hatası veya program ayarlarında hata var", Toast.LENGTH_SHORT).show();

            
         }
         }
    }
    
    private class AccessTokenGet extends AsyncTask<String, String, Boolean> {
    	
    	
    	@Override
        protected void onPreExecute() {
            super.onPreExecute();
            progress = new ProgressDialog(getActivity());
            progress.setMessage("Bilgiler alınıyor ...");
            progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progress.setIndeterminate(true);
            progress.show();
            
    }
        
    	
	       @Override
	       protected Boolean doInBackground(String... args) {
	    	   
	    	   try {
	    		  

	    		 accessToken = twitter.getOAuthAccessToken(requestToken, oauth_verifier); 		   
	    		 SharedPreferences.Editor edit = pref.edit();
                 edit.putString("ACCESS_TOKEN", accessToken.getToken());
                 edit.putString("ACCESS_TOKEN_SECRET", accessToken.getTokenSecret());
                 User user = twitter.showUser(accessToken.getUserId());
                  profile_url = user.getOriginalProfileImageURL();
                 edit.putString("NAME", user.getName());
                 edit.putString("IMAGE_URL", user.getOriginalProfileImageURL());
                 edit.putString("takipci",Integer.toString(user.getFollowersCount()));

                 edit.commit();  
	    		    
	           
			} catch (TwitterException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				
				
			}	    	
	    	   
	                     return true;
	       }
	        @Override
	        protected void onPostExecute(Boolean response) {
	        	if(response){
	                  progress.hide();
	        		  Fragment profile = new ProfileFragment();
	                  FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();	              
	                  ft.replace(R.id.content_frame, profile);
	                  ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
	                  ft.addToBackStack(null);
	                  ft.commit();

	        	}
	        	}
	        
	        	
	        }
	   }
    
    

Uygulamada kullanacağımız temel bileşenleri ele aldık. Nasıl uygulayacağımızı da anlattıktan sonra artık uygulamamız üzerinden bir kaç ekran görüntüsü ile yazımızı btirelim.

uyg_giris
uyg_anaekran
uyg_tweet
uyg_atilan

Yazımı burada sonlandırıyorum. Proje le ilgili tüm doyayı aşağıdaki linkten alabilirsiniz. Eğer Github kllanmayı bilmiyorsanız,lin açtıktan sonra sağ taraftan Download Zip seçeneği ile dosyaların tümünü indirebilirsiniz.

AndrodiTwitter

Bu proje ve diğer projelerime de yine Github hesabımı takip ederek ulaşbilirsiniz.

https://github.com/ayhankorkmaz

Eğer sizde projeyi oluşturup tweet atarsanız benimde haberim olur ve yararlandığınızı anlayabilirim :)

Herhangi bir sorunuz ve/veya yorumunuz varsa yorum kısmından iletebilirsiniz.

Yazar :

Elektrik-Elektronik mühendisiyim. 2 yıldır bu blogda yazıyorum. Ve 6 aydır aktif olarak internet siteleri yönetiyorum. Kişisel olarak da teknoloji ve fotoğrafçılıkla ile ilgileniyorum.



Beni sosyal medya hesaplarım üzerinden takip edin:

YORUMLAR

Daha fazla Android
android
Android programlamaya Giriş-Webview Kullanımı

Merhaba Arkadaşlar, Bu yazımda sizlere Android üzerinde webview kullanımını anlatmaya çalışacağım bir örnekle.Öncelikle webview nedir ve ne işe yarar bundan...

android
Android Programlamaya Giriş-Android Studio Kurlumu

Merhaba Arkadaşlar, Bu yazımla beraber Android Programlamaya başlıyorum. Bu yazımda Programlamaya başlayabilmek için yapılması gerekenleri,indirilmesi gereken dosyaları ve takip edilmesi...

Kapat