public String getCityNameFromLocation(Context context, Double latitude,
Double longitude) throws IOException {
String res = "";
Geocoder gcd = new Geocoder(context, Locale.getDefault());
List addresses = gcd.getFromLocation(latitude, longitude, 1);
if (addresses.size() > 0)
res = addresses.get(0).getLocality();
return res;
}
пятница, 1 ноября 2013 г.
Как получить адрес по координатам
пятница, 25 октября 2013 г.
четверг, 17 октября 2013 г.
среда, 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.
А в главном Activity создаем экземпляр класса
в onCreate
дерегистрируем по окончании работы
в onDestroy
Обязательным для возможности совершения телефонного звона является добавление пермишена
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
в коде
http://androidcodemonkey.blogspot.ru/2010/03/how-to-base64-encode-decode-android.html
в коде
BaseCustom64.encodeBytes(str.getBytes()));
понедельник, 7 октября 2013 г.
четверг, 3 октября 2013 г.
ViewPagerIndicator
Привет всем, кого здесь никогда и не было)
Шикарная библиотека для создания пагинатора в приложении Android
https://github.com/JakeWharton/Android-ViewPagerIndicator
Шикарная библиотека для создания пагинатора в приложении Android
https://github.com/JakeWharton/Android-ViewPagerIndicator
понедельник, 9 сентября 2013 г.
Как распарсить JSON массив
int id;
String name;
JSONArray array = new JSONArray(string_of_json_array);
for (int i = 0; i < array.length(); i++) {
JSONObject row = array.getJSONObject(i);
id = row.getInt("id");
name = row.getString("name");
}
среда, 4 сентября 2013 г.
ActionBar on Android 2.2
Как корректно добавить SupportLibrary
http://habrahabr.ru/post/189680/
Как задать background у компонента ActionBar
Еще во втором андроиде нужно убирать TitleBar
http://habrahabr.ru/post/189680/
Как задать background у компонента ActionBar
private void setActionBarBackground() {
ActionBar ab = getSupportActionBar();
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[]{0xFFFFFFFF, 0xFF000000});
gd.setCornerRadius(0f);
ab.setBackgroundDrawable(gd);
}Еще во втором андроиде нужно убирать TitleBar
if (VERSION.SDK_INT < VERSION_CODES.ICE_CREAM_SANDWICH) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
ActionBar actionBar = getSupportActionBar();
setActionBarBackground(actionBar);
}
check GPS provider
Как осуществить проверку наличия GPS на устройстве
При поиске по locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) вылезает Exception на устройствах, где GPS нет. а эксепшены - это же не наш метод)
поэтому определяем наличие GPS более гуманным способом
При поиске по locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) вылезает Exception на устройствах, где GPS нет. а эксепшены - это же не наш метод)
поэтому определяем наличие GPS более гуманным способом
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Listproviders = new ArrayList (); providers = locationManager.getAllProviders(); for(String s:providers){ if(s.equals("gps")){ //GPS есть }else{ //GPS нет }
Blogger java/html code formatting
Как оказалось - все просто
проходим путь Шаблон-Изменить HTML-разворачиваем код от тега
http://blog.cruxframework.org/2011/10/easy-code-syntax-highlight-on-blogger.html
далее нужный фрагмент кода заключаем в тег
или
проходим путь Шаблон-Изменить HTML-разворачиваем код от тега
<b:skin>и вставляем содержимое файлов css из ссылочки
http://blog.cruxframework.org/2011/10/easy-code-syntax-highlight-on-blogger.html
далее нужный фрагмент кода заключаем в тег
<pre class="brush:html"> ... </pre>
или
<pre class="brush:java"> ... </pre>
public class SyntaxHighlighterWorksFineHere
{
public static void main(String[] args)
{
System.out.println("Hello world!");
}
}
вторник, 3 сентября 2013 г.
Android 2.2. Диалоги
Вот как нужно разделять стили для разных версий Android
особенность второго в том, что диалоговое окно (кастомное) и при black и light одинаковое, а цвета внутренних компонентов меняются в зависимости от установленного стиля. и вот так получается, что окно всегда темное, а содержимое и темное, и светлое.
в отличие от четвертой версии Андроид.
итак!
нужно разделить стили по папкам - дефолтная, v11,v14
для компонента AutoCompleteTextView в дефолтную прописываем в styles.xml
и для компонента ProgressBar
особенность второго в том, что диалоговое окно (кастомное) и при black и light одинаковое, а цвета внутренних компонентов меняются в зависимости от установленного стиля. и вот так получается, что окно всегда темное, а содержимое и темное, и светлое.
в отличие от четвертой версии Андроид.
итак!
нужно разделить стили по папкам - дефолтная, v11,v14
для компонента AutoCompleteTextView в дефолтную прописываем в styles.xml
<style name="LightTheme" parent="@android:style/Theme.Light"> <item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextViewLight</item> <item name="android:dropDownItemStyle">@style/Widget.DropDownItemLight</item> </style> <style name="BlackTheme" parent="@android:style/Theme"> <item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextViewLight</item> <item name="android:dropDownItemStyle">@style/Widget.DropDownItemLight</item> </style> <style name="AutoCompleteTextViewLight" parent="@android:style/Widget.AutoCompleteTextView"> <item name="android:textColor">@android:color/primary_text_light</item> </style> <style name="Widget.DropDownItemLight" parent="@android:style/Widget.DropDownItem"> <item name="android:textColor">@android:color/primary_text_light</item> </style>
и для компонента ProgressBar
<style name="ProgressBarLight" parent="@android:style/Widget.ProgressBar"> </style>а для v11 и v14
<style name="LightTheme" parent="@android:style/Theme.Holo.Light"> </style> <style name="BlackTheme" parent="@android:style/Theme.Holo"> </style> <style name="ProgressBarLight" parent="@android:style/Widget.Holo.ProgressBar"> </style>
Лирическое отступление №1
буду постить здесь интересные решения, найденные при выполнении задач. вот и начну лучше разбираться, сама для себя уясню много вещей, да и проще потом будет в коде разбираться)
муа)
муа)
Подписаться на:
Комментарии (Atom)