29 Mart 2018 Perşembe

ObjectAnimator Sınıfı

Giriş
Animators API ile geliyor.

ofInt metodu
Şöyle yaparız.
// "ball" means, that Animators API will search for `public setBall(int)` method inside
// MyView.java and call that method
ObjectAnimator ball = ObjectAnimator.ofInt(myView, "ball", 20, 100);
ball.setDuration(1000);
ball.start();

Build Sınıfı

Giriş
Şu satırı dahil ederiz.
import android.os.Build;
VERSION Alanı
Şöyle yaparız.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && 
    Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {

  // write your code here which should work for version between 18 and 21.
}
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{ 
  // write the alternate code for API 21+
}
Şöyle yaparız.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  ...
} else {
  ...
}
VERSION_CODES Alanı
JELLY_BEAN_MR2 = API 18
LOLLIPOP = API 21
O = Oreo API 26


25 Mart 2018 Pazar

BroadcastReceiver Sınıfı

Giriş
Şu satırı dahil ederiz.
import android.content.BroadcastReceiver;
BroadcastReceiver sistem veya uygulama olaylarını işlemek için kullanılır.

onReceive metodu 
Bu metod çok uzun çalışmamalıdır. Açıklaması şöyle.
When it runs on the main thread you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed).
onReceive Intent parametresi
XML içinde action belirtsek bile kontrol etmek için kullanılır.
@Override
public void onReceive(Context context, Intent intent) {
  if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
    ...
  }
}
Diğer

Kullanım
İki şekilde kullanılabilir.

1. Manifest içinde.
Bu durumda BroadcastReceiver nesnesini unregister etmeye gerek yoktur.

2. Activity içinde
Activity onResume(), onCreate() metodları içinde register edilir.
onDestroy() metodunda unregister edilir.

Tanımlama
Şöyle yaparız
BroadcastReceiver receiver= new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // do your stuff here

  }
};
1. Manifest İçinde Tanımlama
Şöyle yaparız.
<receiver android:name="com.domain.app.">
    <intent-filter>
        <action android:name="android.intent.action.XYZ" />
    </intent-filter>
</receiver>
Action alanı bazen bir provider olabilir.
<receiver android:name=".SmsListener">
  <intent-filter android:priority="2147483647">
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver>

2. Activity İçinde Tanımlama
Örnek
Sınıfımız şöyle register edilir.
registerReceiver(myReceiver, new IntentFilter(...));
Şöyle unregister edilir.
unregisterReceiver(myReceiver);
Örnek
onCreate() metodunda şöyle yaparız.
registerReceiver(this.broadCastNewMessage, new IntentFilter("bcNewMessage"));
onDestroy() içinde şöyle yaparız.
unregisterReceiver(broadCastNewMessage);
Service sınıfında şöyle yaparız.
sendBroadcast(new Intent().setAction("bcNewMessage"));
Wifi Taraması İçin Kullanımı
Wifi Taraması sonuçlarını almak için kullanılabilir.

Alarm İçin Kullanımı
BroadcastReceiver sınıfı AlarmManager ile beraber kullanılarak belli bir saatte bir iş yapmak için kullanılabilir.

Intent intent = new Intent(context, MyBroadcastReceiver.class);
PendingIntent recurring = PendingIntent.getBroadcast(...);
AlarmManager alarms = (AlarmManager) getSystemService(...);
alarms.setRepeating(...);
AlarmManager şöyle kullanılır. Önce ne zaman çalışmasını istediğimizi ve aralığını kodlarız.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 0);
int interval = 1000 * 60 * 60 * 24;
Daha sonra alarmı kurarız.
/* Repeating on every 24 hours interval */
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                          interval, recurring);
Boot İçin Kullanımı
Boot yazısına taşıdım.

SMS okumak için Kullanımı
SMSMessage yazısına taşıdım.

21 Mart 2018 Çarşamba

SQLiteDatabase Sınıfı

Giriş
Şu satırı dahil ederiz.
import android.database.sqlite.SQLiteDatabase;
Açıklaması şöyle.
Android wraps the SQLite code and export some java interface (android.database.sqlite.SQLiteDatabase), but miss some advanced features from the original SQLite implementation

1.Custom Function
2.Encryption
3.URI file syntax
4.VFS
Dosya Nerede Olmalı
Sqlite verisinin Android Studio projelerin asset dizini altında olması tavsiye ediliyor.
+ main
++ assets
+++ db.sqlite <----
++ java
++ res
Yanlışlıkla res dizini altına konabilir. res dizini altında assets diye bir şey yok.
+ res
++ drawable
++ layout
++ menu
++ mipmap
++ values
constructor
SQLiteOpenHelpersınıfından kalıtan bir sınıf içinde şöyle yaparız
SQLiteDatabase db = getWritableDatabase ()
beginTransaction-endTransaction metodları
Açıklaması şöyle
The changes will be rolled back if any transaction is ended without being marked as clean (by calling setTransactionSuccessful).
Basit bir örnek
SQLiteDatabase db = ...
db.beginTransaction();
db.execSQL("ALTER TABLE ...");
db.setTransactionSuccessful();
db.endTransaction();
close metodu
Şöyle yaparız.
if(db.isOpen())
  db.close();
compileStatement metodu
Bir PreparedStatement oluşturur. Şöyle yaparız.
String sql = "...";
SQLiteStatement insert = db.compileStatement(sql);
execSQL metodu
Verilen SQL'i çalıştırır. Örneğin tablo yaratmak için kullanabiliriz.
SQLiteDatabase db = ...
db.execSQL("CREATE TABLE IF NOT EXISTS users_table (name TEXT, last TEXT)");
Satır eklemek için kullanabiliriz.
db.execSQL("INSERT INTO users_table VALUES('" + name + "','" + last + "'");
getMaximumSize metodu
Metodun içi şöyle. Sanırım teorik bir limit dönüyor.
public long getMaximumSize() {
  long pCount = DatabaseUtils.longForQuery(this, "PRAGMA max_page_count;", null);
 return pCount * getPageSize();
}
insert metodu
Şu satırı dahil ederiz.
import android.content.sqlite.ContentValues;
ContentValues nesnesinin değerleri ile satır yaratır. İşlem başarısız ise -1 döner. Başarılı ise RowID döner. Eğer RowID autogenerated ise değeri 1'den başlar.
ContentValues values = new ContentValues();
values.put(KEY_PRODUCT_TYPE, code);
values.put(KEY_PRODUCT_QUANTITY, continent);
values.put(KEY_PRODCUT_COST, region);

long rowId = db.insert (SQLITE_TABLE, null, values);

isOpen metodu
Şöyle yaparız.
if(db.isOpen())
  db.close();
query metodu
Şöyle bir sorgu çalıştırmak isteyelim.
SELECT * FROM Customers
WHERE City LIKE '%XXXX%';
Şöyle yaparız. Parametreler sırasıyla şöyledir.table, columns, selection, selectionArgs, groupBy, having, orderBy, limit
Cursor cursor = db.query("Customers",
  null, "City LIKE ?", new String[] { "%" + name + "%" }, 
  null,
  null,
  null);
rawQuery metodu
Cursor almak için kullanılabilir.
String selectQuery = "SELECT * FROM ...";
SQLiteDatabase db = ...
Cursor cursor = db.rawQuery(selectQuery, null);
setTransactionSuccessful metodu
Şöyle yaparız.
SQLiteDatabase db = 
db.beginTransaction();
...
db.setTransactionSuccessful();
db.endTransaction();