Browsed by
Category: Android Programlama

Android Uygulama Silme Kodu

Android Uygulama Silme Kodu

Silmek istediğiniz uygulamanın paket ismini biliyor olmanız gerekiyor öncelikle. Uygulamanın paket ismini aşağıda yazılmış olan com.example.app ile değiştirip deneyin.

 Intent intent = new Intent(Intent.ACTION_DELETE);
 intent.setData(Uri.parse("package:com.example.app"));
 startActivity(intent);
Android – Uygulamayı Cihaz Admini Yapma

Android – Uygulamayı Cihaz Admini Yapma

Uygulamanızı cihazın admini neden yapmak isteyelim? Bir çok sebebi olabilir bunun. Bir kaç tanesini aşağıda sıralarım.

Uygulamanız ile,
-Ekranı kilitleyip, karartabilirsiniz
-Cihazınızdaki dosyaları şifreleyebilirsiniz
-Yeni bir telefon şifresi tanımlayabilir ya da kaldırabilirsiniz
-Bütün verileri temizleyebilirsiniz vb..

Kodu şu şekildedir.

AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/myStyle" >
...

   <receiver android:name="com.uygulama.paketi.MyAdmin"
         android:permission="android.permission.BIND_DEVICE_ADMIN">
       <meta-data android:name="android.app.device_admin"
                android:resource="@xml/policies" />
       <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                <action android:name="android.app.extra.DEVICE_ADMIN" />
       </intent-filter>
   </receiver>

...
</application>

AndroidManifest.xml de adı geçen policies.xml
Bunlardan işinize yaramayanları çıkartmanızda fayda var. Çünkü izinlerde ihtiyacınız olmayan birşey de isteniyorsa, kullanıcıyı korkutmuş oluruz.

<!--?xml version="1.0" encoding="utf-8"?-->
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
       <limit-password />
       <watch-login />
       <reset-password />
       <force-lock />
       <wipe-data />
       <expire-password />
       <encrypted-storage />
       <disable-camera />
       </uses-policies>
</device-admin>  

Admin Java Sınıfı MyAdmin.java

package com.covayurt.screenoff.receivers;

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyAdmin extends DeviceAdminReceiver{


    void showToast(Context context, CharSequence msg)
    {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

    public CharSequence onDisableRequested(Context paramContext, Intent paramIntent)
    {
        return "This is an optional message to warn the user about disabling.";
    }

    public void onDisabled(Context paramContext, Intent paramIntent)
    {
        showToast(paramContext, "Sample Device Admin: disabled");
    }

    public void onEnabled(Context paramContext, Intent paramIntent)
    {
        showToast(paramContext, "Sample Device Admin: enabled");
    }

    public void onPasswordChanged(Context paramContext, Intent paramIntent)
    {
        showToast(paramContext, "Sample Device Admin: pw changed");
    }

}

MainActivity.java


    static public final int ADMIN_REQUEST = 1;
    private DevicePolicyManager deviceManger;
    private ComponentName compName;
    private boolean active;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        
        deviceManger = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        compName = new ComponentName(this, MyAdmin.class);
        active = deviceManger.isAdminActive(compName);
        if(!active)
        {
           Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
           intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
           startActivityForResult(intent, ADMIN_REQUEST);
        }
        ...
    }

    ... 

    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == ADMIN_REQUEST)
        {
             //Burada admin isteğini kabul edip etmediğine göre işlem yapabilirsiniz.
        }

        super.onActivityResult(requestCode, resultCode, data);
    }

Android Material Design Floating Action Button Yapımı

Android Material Design Floating Action Button Yapımı

fab_button

Yapmak istediğimiz tam olarak yukarıdaki gibi liste kaydıkça kaybolup geri gelen bir buton 🙂

Android Studio için başlangıcımız şu şekilde.

build.gradle dosyası

dependencies {
    ..
    compile 'com.melnykov:floatingactionbutton:1.3.0'
    ..
}

activity_schedule_list.xml

<RelativeLayout .. xmlns:fab="http://schemas.android.com/apk/res-auto" >
    ...
    <com.melnykov.fab.FloatingActionButton android:id="@+id/add_schedule_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_add" fab:fab_colorNormal="@color/primary" fab:fab_colorPressed="@color/primaryDark" fab:fab_colorRipple="@color/primaryDark" android:layout_alignParentBottom="true" android:layout_marginBottom="44dp" />

     ...
</RelativeLayout>

Java Sınıfı

public class ActivityClass extends ActionBarActivity implements View.OnClickListener, AdapterView.OnItemClickListener {
private ListView scheduleListView;
    private TextView tvScheduleInfoText;
    private FloatingActionButton fab;
    private ImageButton actionButton;

     protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_schedule_list);

        ...

        scheduleListView = (ListView) findViewById(R.id.list);
        fab = (FloatingActionButton) findViewById(R.id.add_schedule_button);
        actionButton = (ImageButton) findViewById(R.id.add_schedule_button);

        scheduleListView.setOnItemClickListener(this);
        actionButton.setOnClickListener(this);
        fab.attachToListView(scheduleListView);

        ...

    }

    @Override
    public void onClick(View v)
    {
        if(v.getId() == actionButton.getId())
        {
            //Ne gerekiyorsa
        }
    }
    
}

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <color name="primary">#009688</color>
    <color name="primaryDark">#00776A</color>
    ...
</resources>
Android Google Play’den Versiyon Kontrolü

Android Google Play’den Versiyon Kontrolü

Versiyon güncellemelerini uygulamadan bildirim olarak almak isteyenlere gelsin. Biliyorum kullanıcılar güncelleme konusunda inatçı olabiliyorlar 🙂 Hatılatmak lazım.

Öncesinde jSoup-x.x.x.jar kütüphanesini indirmeli ve bunu projeye eklemelisiniz. Eclipse platformu için Projeye sağ tıklayıp->Properties->Java Build Path->Libraries->Add External JARs diyerek indirdiğiniz .jar dosyasını ekleyebilirsiniz.

Bir AsyncTask Class’ı yaratarak başlayalım. Bu işlemi arka planda yapacağız.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



class CheckVersionFromGooglePlay extends AsyncTask(String, Void, String) {



	private Context context;
	private String version="";



	public CheckVersionFromGooglePlay(Context context)
	{
		this.context = context;
	}



    @Override
    protected String doInBackground(String... strings) {



        try {



            Document doc  = Jsoup.connect("https://play.google.com/store/apps/details?id=com.covayurt.toggleIt").get();
            // Get document (HTML page) title



            Elements elements = doc.getElementsByAttributeValueContaining("itemprop", "softwareVersion");



            for(Element ele : elements)
            {
            	Log.i("toggleIt",ele.text());
            	version = ele.text();
            }



        }
        catch(Throwable t) {
            t.printStackTrace();
        }



        version = version.trim();
        //Burdan sonra versiyon ile ne yapmak isterseniz yapabilirsiniz.



        return version;
    }



    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);



    }
}



Bu kodu kullanmak için ise; Versiyon kontrolü yapmanız gereken yerde,

(new CheckVersionFromGooglePlay(this)).execute("");

kodunu yazabilirsiniz.

AGG’de Google Gözlüğü (Glass) Denerken Selfie’ni çek

AGG’de Google Gözlüğü (Glass) Denerken Selfie’ni çek

Kendini Geliştir, Dünyayı Değiştir

Dünyaya ve Türkiye’ye değer katmak amacıyla, teknoloji gruplarının birlikte hazırladığı Android Geliştirici Günlerinde; Google Gözlüğünü (Google Glass) deneyebilir, 64  farklı oturuma katılabilir, kod yazarak yarışabilir, bilişim sektörüne yön veren firmaların standlarına uğrayabilir, farklı insanlarla tanışarak çevrenizi genişletebilir, teknolojik oyunlar oynayabilirsiniz. Ve işte konferansın  ana sponsorları  Platin: Google;  Altın: PayPal and Sony; Gümüş: HTC, Nokia, Alcatel, Turkcell GY ve OBSS.

 

Android Geliştirici Günleri (AGG) 16-17 Mayıs tarihlerinde üçüncü kez ODTÜ KKM’de yapılıyor. Türkiye’nin ve dünyanın farklı kentlerinden  teknoloji topluluklarının birlikte hazırladığı AGG,  GDG (Google Developer Group) İstanbul, GDG Eskişehir, GDG Konya, GDG Ankara  ve IEEE ODTÜ  öncülüğünde 20 farklı ülkeden geliştirici gruplarının  işbirliğiyle gerçekleşiyor.

Google Gözlüğünü(Glass) denemek için Chris Tuttle’ı bulun ve denemek istediğinizi söyleyin.

 

AGG, dünyaya ve Türkiye’ye değer katmak amacıyla bir araya gelen  teknolojiye ilgi duyan öğrenci ve farklı mesleklerden kişilerin birlikte düzenlediği  bir konferanstır. Farklı ülkelerden  teknoloji gruplarının tamamen gönüllü olarak ortak bir amaç için bir araya gelip uluslararası bir organizasyona imza atabileceğini göstermektedir.

Ücretsiz Katılım

Katılımın ücretsiz olduğu konferans, açılış konuşmasıyla başlayacak ve iki gün boyunca  dört farklı salonda  toplam 64 oturumla devam edecek. 30 yabancı konuşmacının yer aldığı etkinlikte Juhani Lehtimak, Stephan Janssen, Mark Allison, Abhisek Devkota, Al Sutton gibi   isimler de sunum yapacak. Katılmak için sadece kayıt olunuz.

 

Mobil Hackathon ve indir.com Mobile Uygulama Yarışması Ödül Töreni

Etkinlik kapsamında bir de Mobil Hackathon gerçekleşecek.16 Mayıs Cuma günü 13:30 da başlayacak ve 17 Mayıs Cumartesi günü 13:30 ‘da  son bulacak olan yarışmada, Geliştiriciler 24 saat aralıksız kod yazarak yarışacaklar.  Ayrıca  indir.com Mobil Uygulama Ödülleri yarışmasının ödül töreni ve Programlama Çocuk Oyuncağı  etkinliğinin   uygulamalı oturumlarından biri  de AGG’de  yapılacak.

Katılın ve Hediyeler Kazanma Şansına Sahip Olun

Konferans esnasında katılımcıları sürpriz çekilişler ve ödüllü(akıllı telefonlar, tabletler, kitaplar, tshirtler, beaconlar, vb.) oyunlar bekliyor. Oyunlar konferans süresince devam edecek, kazananlara  ödülleri son gün konferans bitiminde verilecek. Ayrıca tüm katılımcılara eşantiyonlar verilecektir. Sadece kayıt olun ve etkinliğe katılın.

 

Bu Güzel Konferansın Gerçekleşmesini Sağlayan Tüm Sponsorlara Teşekkürler

 

Android Geliştirici GünleriAndroid Developer Days

Kendini Geliştir, Dünyayı Değiştir

Android’de OpenCV4Android ile Yüz Saptama (Face Detection)

Android’de OpenCV4Android ile Yüz Saptama (Face Detection)

Daha önceden OpenCv4Android kütüphanesinin android uygulamasına eklenmesi hakkında yazmıştım. Şimdi ise OpenCv kütüphanesi ile yüz saptama nasıl yapılacağına bir bakalım.

Örneğin bir yüz tanıma işlemi yapacaksınız. Bunun için gerekli olan şey öncelikle fotoğrafta bir yüzün olduğunun saptanmasıdır. Gelin nasıl yapılıyormuş bakalım.

Eğer OpenCv4Android kütüphanesini import etmediyseniz buradan nasıl yapılacağına bakabilirsiniz.

Bu yazıda kullanılacak kütüphaneler :




import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.MatOfRect;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.objdetect.CascadeClassifier;

İçinde yüz saptanacak bir fotoğrafınız var ve bu fotoğrafın telefon içindeki diznini de biliyorsunuz. O zaman öncelikle Mat değişkenine bu fotoğrafı atalım. 




String imagePath = "/mnt/sdcard/foto.jpg";
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);



Eğer büyük ölçekli fotoğraflarla çalışıyorsanız Out Of Memory Exception almanız normaldir. Bunun için buradaki metodu kullanabilirsiniz. Herşeyden önce çalışacağınız fotoğrafın grayscale olması gerekiyor.  Aşağıdaki metod ile fotoğrafınızı GrayScale e çevirebilirsiniz.

public Bitmap toGrayscale(Bitmap bmpOriginal)
{
       int width, height;
       height = bmpOriginal.getHeight();
       width = bmpOriginal.getWidth();
       Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
                                                 Bitmap.Config.RGB_565);
       Canvas c = new Canvas(bmpGrayscale);
       Paint paint = new Paint();
       ColorMatrix cm = new ColorMatrix();
       cm.setSaturation(0);
       ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
       paint.setColorFilter(f);
       c.drawBitmap(bmpOriginal, 0, 0, paint);



       return bmpGrayscale;
}

Bu uygulamada yüz saptamada kullanılacak olan teknikleri uygulayabilmemiz için lbpcascade_frontalface.xml ve haarcascade_frontalface_alt.xml xml dosyalarını projeye dahil etmemiz lazım. Dosyaları buradan indirebilirsiniz.

Bu dosyaların kullanılabilmesi için projenizden, res klasörüne sağ tıklayıp New->Folder diyip raw isminde bir klasör oluşturun. İndirdiğiniz dosyaları da bu klasörün içine atın.

Yüz saptama(Face Detection) tarafına gelecek olursak. Bu iki xml dosyası yüz saptama yapılırken programı farklı tekniklerle çalıştırdığı için sonuçları herzaman aynı olmayabiliyor. Örneğin, Haar Cascade tekniği Lbp Cascade tekniğine göre daha yavaş olmasına rağmen daha doğru sonuç elde ediyor.

Öncelikle class içindeki private tanımlamalr şöyle olmalı.

 private InputStream is;
 private FileOutputStream os;
 private File cascadeDir;
 private Mat image;
 private File mCascadeFile;
 private CascadeClassifier mJavaDetector;

Kullanımlarına gelecek olursak, aşağıdaki metod verilen fotoğraftaki yüzleri çıkarmanızı sağlıyor. Bunların çalışması için öncelikle OpenCv kütüphanesinin import edilmiş olması lazım. Eğer hala import etmediyseniz. Yazımın başında nasıl yapılacağı hakkında bilgi var.

public void faceDetect(Mat img) throws IOException, TransformerException
{
    try { //cascade dosyasının yüklenme işlemi



	   is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
	   cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
           //mCascadeFile comment satırlı yerdeki gibi de kullanabilirsiniz.
	   mCascadeFile = new File(cascadeDir,
                                   "lbpcascade_frontalface_.xml");
	   /*mCascadeFile = new File(cascadeDir,
                                  "haarcascade_frontalface_default.xml");*/



	   os = new FileOutputStream(mCascadeFile);



	   byte[] buffer = new byte[4096];
	   int bytesRead;



	   while ((bytesRead = is.read(buffer)) != -1)
	   {
	       os.write(buffer, 0, bytesRead);
	   }
	   is.close();
	   os.close();



	   mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());



	   if (mJavaDetector.empty())
	   {
	       Log.e(TAG, "Failed to load cascade classifier");
	       mJavaDetector = null;
	   }
	   else
	       Log.i(TAG,"Loaded cascade classifier from " +
                     mCascadeFile.getAbsolutePath());



	   //mCascadeFile.delete();
	   cascadeDir.delete();



    }
    catch (IOException e)
    {
	e.printStackTrace();
	Log.e(TAG, "Failed to load Cascade File. " +
              "Exception thrown: " + e);
    }



    MatOfRect facesdetectionMOR = new MatOfRect();
    //yüz saptamanın yapıldığı yer
    mJavaDetector.detectMultiScale(img, facesdetectionMOR);
    //çıkarılan yüzler
    List facesdetection = facesdetectionMOR.toList();
    //resimden bulunan yüzün kesilmesi için gerkeen değişkenler
    Mat uncropped, cropped;
    Bitmap croppedImg;//kesilen yüzü bitmap olarak kaydetmeliyiz.



    for (Rect rect : facesdetection)
    {//çıkarılan yüzler üzerinde gezinme



    	uncropped = img;
       	Rect roi = rect;//kesilecek olan dikdörtgen
       	cropped = new Mat(uncropped, roi);//kesilmiş olan foto
        //kaydetmek için bitmape çeviriyoruz.
       	croppedImg = Bitmap.createBitmap(cropped.cols(), cropped.rows(),
                                        Bitmap.Config.RGB_565);
       //mat türünden bitmap değişkenine dönüşüm
       	Utils.matToBitmap(cropped, croppedImg);
        //her defasında unique bir isim verilmesi daha iyi olur
       	File file = "/mnt/sdcard/Pics/res1000.jpg";



       	FileOutputStream out = new FileOutputStream(file);
        //çıkarılan yüzlerin basılması
       	croppedImg.compress(Bitmap.CompressFormat.JPEG, 90, out);



    }



    //grayscale fotoğrafın içindeki yüzlerin çizdirilmesi
    for (Rect rect : facesdetection)
    	Core.rectangle(img, rect.tl(), rect.br(),
                       new Scalar(0, 255, 0, 255), 4);
}

Kolay gelsin 😉

Android için OpenCv Kütüphanesi İmplementasyonu

Android için OpenCv Kütüphanesi İmplementasyonu

OpenCV(Open Source Computer Vision) Nedir?

  • —Gerçek zamanlı bilgisayar ile görme kütüphanesi.
  • —Orijinal olarak C/C++ kütüphanesi.
  • —Optimize edilmiş 500’den fazla fonksiyona sahip.
  • BSD(Berkeley Software Distribution) lisansına sahip

OpenCV Desteği Bulunan İşletim Sistemleri ve Programlama Dilleri

Programlama Dilleri                                    İşletim Sistemleri

C/C++ Linux
Windows OS x
Java Android
NET iOS
PHP BlackBerry 10
MATLAB Maemo
OCTAVE
Python
Ruby
Delphi

OpenCV4Android İmplementasoynu

Gereksinimler

OpenCV4Android SDK İçeriği

  • —SDK
  • —OpenCV Manager APK
  • —Örnek Uygulamalar

Kurulum İçin Yapmanız Gerekenler

Kurulumun nasıl yapılacağı OpenCV4Android resmi sayfasında gösteriliyor. Yine de ben size açıklamaya çalışayım.

  • SourceForge sitesine yüklenmiş olan OpenCV-x.x.x-android-sdk.zip dosyasının son versiyonunu indirin.
  • C:/ de yeni bir çalışma alanı açın.(Mesela “C:/OpenCVAndroid/”)
  • İndirdiğiniz .zip dosyasını bu dizinde açın.
  • Eclipse için, OpenCV Android SDK dosyasını proje import eder gibi import edin.(Package Explorer’da boş bir alana sağ tıklayıp import diyin)
  • Gelen sayfada General->Existing Projects into Workspace diyerek devam edin.
  • C:/OpenCVAndroid/ klasörünü seçerek alttaki OpenCV Library’yi işaretleyin. Diğerleri yazılmış örneklerdir. Onları da import ederek üzerinde çalışabilirsiniz.
  • Finish butonuna basarak import işlemini bitirin.

Bazen derleme sorunları çıkabiliyor. Bu sorunları düzeltmek için,

  1. Eclipse’den OpenCV Library klasörüne sağ tıklayarak Android Tools->Fix Project Properties diyip bundan sonra menüden Project->Clean diyerek düzeltebilirsiniz.
  2. Eclipse’den OpenCV Library klasörüne sağ tıklayıp Properties->Android sekmesinden Target kısmının 3.0 ve yükseğinin seçildiğinden ve alttaki checkbox’ın da isLibrary seçildiğinden emin olun.

OpenCV4Android kullanıma hazır hale geldi. Peki nasıl uygulama geliştireceğiz?

Buradan Android’de OpenCV4Android İle Yüz Saptama (Face Detection) yazıma göz atabilirsiniz.

Android SDK ile Yüz Saptama

Android SDK ile Yüz Saptama

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Bitmap.Config;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.util.Log;



public static Bitmap faceDetection(Bitmap picture)
{
    	//Fotoğrafın enini ve boyunu alır
    	int width = picture.getWidth();
        int height = picture.getHeight();
        //Fotonun en ve boy oranlarına göre FaceDetector türünde bir nesne oluşturulur
        //maksimum kaç yüz saptanması gerektiği belirlenir (5)
        FaceDetector detector = new FaceDetector(width, height,5);
        Face[] faces = new Face[5];//en fazla 5 tane yüz saptanması için



        Bitmap newBitmap= Bitmap.createBitmap(width, height, Config.RGB_565);
        Paint ditherPaint = new Paint();
        Paint drawPaint = new Paint();
        //yüzü çerçeve içine alacak diktörtgenin özellikleri belirlenir
        ditherPaint.setDither(true);
        drawPaint.setColor(Color.RED);
        drawPaint.setStyle(Paint.Style.STROKE);
        drawPaint.setStrokeWidth(2);
        //Fotoğraf üzerine çizim yapılabilmesi için canvasa eklenir
        Canvas canvas = new Canvas();
        canvas.setBitmap(newBitmap);
        canvas.drawBitmap(picture, 0, 0, ditherPaint);
        //Kaç tane yüz bulunduğu bilgisi
        int facesFound = detector.findFaces(newBitmap, faces);
        PointF midPoint = new PointF();
        float eyeDistance = 0.0f;
        float confidence = 0.0f;



        Log.i("FaceDetector", "Number of faces found: " + facesFound);



        if(facesFound > 0)
        {
                for(int index=0; index < facesFound; ++index)
                {//her bulunan yüz için yapılan işlemer
                     faces[index].getMidPoint(midPoint);//bulunan yüzün orta noktası
                     eyeDistance = faces[index].eyesDistance();//gözler arası mesafe px
                     confidence = faces[index].confidence();//güvenilirlik 0-1 arası
                         
                     Log.i("FaceDetector", 
                           "Confidence: " + confidence + 
                           ", Eye distance: " + eyeDistance + 
                           ", Mid Point: (" + midPoint.x + "," + midPoint.y + ")");
                      //yüz üzerine dikdörtgen çizilir     
                     canvas.drawRect((int)midPoint.x - eyeDistance , 
                                     (int)midPoint.y - eyeDistance , 
                                     (int)midPoint.x + eyeDistance, 
                                     (int)midPoint.y + eyeDistance, drawPaint);
                }
        }
        
        return newBitmap;
}
Android Bitmap Out Of Memory Exception Çözümü

Android Bitmap Out Of Memory Exception Çözümü

Bazen Bitmap bir resmi imageview da göstermeye çalışırken ya da oluştururken aldığım bir hataydı. Telefonların düşük donanımlı olmasından kaynaklanan sorunu biraz kaliteyi düşürerek Bitmap oluşturma ile giderebiliriz.

private Bitmap decodeFile(File f){//resim dosyası
    try {
	 //resim boyutunu tanımlıyoruz
	 BitmapFactory.Options o = new BitmapFactory.Options();
	 o.inJustDecodeBounds = true;
	 BitmapFactory.decodeStream(new FileInputStream(f),null,o);



	 //resmin istediğimiz yeni boyutu
	 final int REQUIRED_SIZE=400;



	 //Find the correct scale value. It should be the power of 2.
	 int scale=1;



	 while(o.outWidth/scale/2&gt;=REQUIRED_SIZE
               o.outHeight/scale/2&gt;=REQUIRED_SIZE)
	       scale*=2;



	       //Decode with inSampleSize
	       BitmapFactory.Options o2 = new BitmapFactory.Options();
	       o2.inSampleSize=scale;
	       return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
	 } catch (FileNotFoundException e) {}



   return null;
}

Kullanımı ise şu şekilde:

Bitmap imageBitmap = decodeFile(imageFile);
Java – Android SHA-2 ile Dosya Hash Fonksiyonu

Java – Android SHA-2 ile Dosya Hash Fonksiyonu

public String computeHash(byte[] input)
throws NoSuchAlgorithmException, UnsupportedEncodingException
{
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    digest.reset();



    byte[] byteData = digest.digest(input);
    StringBuffer sb = new StringBuffer();



    for (int i = 0; i < byteData.length; i++)
    {
        sb.append(Integer.toString((byteData[i] 0xff) + 0x100, 16).substring(1));
    }
    return sb.toString();
}