среда, 16 октября 2013 г.

File size limit

//устанавливаем максимальный размер файла
int MAX_IMAGE_SIZE = 2000 * 1024;

String picturePath = ... //абсолютный путь к файлу + имя.расширение

File file = new File(picturePath);
if (file.length() > MAX_IMAGE_SIZE) {
 return false;
} else
 return true;

среда, 9 октября 2013 г.

Телефонные вызовы. Начало, конец звонка.

Для отслеживания начала и окончания звонка необходимо создать класс, наследуемый от BroadcastReceiver.

public class IncomingCallTracker extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle bundle = intent.getExtras();

            Set keys = bundle.keySet();
        for (String key : keys) {
         if(key.equals("state"))
                Log.i("Timing", key + "="+ bundle.getString(key));
        }       
    }

}

А в главном Activity создаем экземпляр класса
в onCreate
br = new IncomingCallTracker();
IntentFilter intFilt = new IntentFilter("action");
registerReceiver(br, intFilt);

дерегистрируем по окончании работы
в onDestroy
unregisterReceiver(br);

Обязательным для возможности совершения телефонного звона является добавление пермишена
<uses-permission android:name="android.permission.CALL_PHONE" />


Телефонные вызовы. Очистка списка истории вызовов

Метод очистки списка истории вызовов
private void deleteNumber(String number) {
  String strUriCalls = "content://call_log/calls";

  Uri UriCalls = Uri.parse(strUriCalls);

  Cursor c = MainActivity.this.getContentResolver().query(UriCalls, null,
    null, null, null);

  if (c.getCount() <= 0) {
   Toast.makeText(getApplicationContext(), "Call log empty",
     Toast.LENGTH_SHORT).show();
  }

  while (c.moveToNext()) {
   String queryString = "NUMBER='" + number + "'";
   Log.v("Timing", queryString);
   int i = MainActivity.this.getContentResolver().delete(UriCalls,
     queryString, null);

   if (i >= 1) {
    Toast.makeText(getApplicationContext(), "Number deleted",
      Toast.LENGTH_SHORT).show();
   } else {
    Toast.makeText(getApplicationContext(),
      "No such number in call logs", Toast.LENGTH_SHORT)
      .show();
   }
  }
 }
еще лучше вызвать удаление звонка после секундной паузы

Runnable mRunnable;
Handler mHandler = new Handler();
mRunnable = new Runnable() {
        @Override
 public void run() {
deleteNumber(number);
        }
};
mHandler.postDelayed(mRunnable, 1000);


ну и конечно же, как выяснилось опытным путем, необходимо добавить пермишены)
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.CALL_PHONE" />

вторник, 8 октября 2013 г.

Base 64 для Android API 7

Что нужно делать, если вдруг у вас оказались в деле смартфоны с API 7, и если нужно закодировать строку в Base64

http://androidcodemonkey.blogspot.ru/2010/03/how-to-base64-encode-decode-android.html

в коде
BaseCustom64.encodeBytes(str.getBytes()));

четверг, 3 октября 2013 г.