вторник, 10 февраля 2015 г.

Using AppCompat 21

Для использования в проекте, поддерживающем Pre-Lolipop Devices, компонентов, доступных только для Lolipop устройств, необходимо в лэйауте указать компонент (например, переключатель):

<android.support.v7.widget.SwitchCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/send_email"/>


или


<android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>



для изменения цвета заголовка приложения необходимо добавить тег в style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">#009688</item>
    </style>

четверг, 25 декабря 2014 г.

Определение типа network-подключения

Создаем ресивер, для отслеживания изменения подключения. Инициализируем ресивер в манифесте:
<receiver
            android:name=".NetworkReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

Ресивер будет реагировать на подключение к интернету и отключение от него. Но не будет возможности отслеживать изменение типа подключения, например с 3g на 2g.
Но если у нас 3g сменилось 2g, и мы отключим передачу данных, а затем снова запустим, отобразится 2g. 
Так же данную проверку можно использовать для выбора метода обращения к серверу - тяжелого или легковесного.

public class NetworkReceiver extends BroadcastReceiver {

    String str2G = "2G";
    String str3G = "3G";
    String str4G = "4G";
    String strWiFi = "WiFi";
    String strMobile = "Mobile";

    public NetworkReceiver() {
    }

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

        if (getNetworkConnectionType(context).equals(strWiFi))
            Toast.makeText(context, strWiFi, Toast.LENGTH_SHORT).show();
        else if (getNetworkConnectionType(context).equals(strMobile))
            Toast.makeText(context, getNetworkClass(context), Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(context, "No connection", Toast.LENGTH_SHORT).show();
    }

    public String getNetworkClass(Context context) {
        TelephonyManager mTelephonyManager = (TelephonyManager)
                context.getSystemService(Context.TELEPHONY_SERVICE);
        int networkType = mTelephonyManager.getNetworkType();
        switch (networkType) {
            case TelephonyManager.NETWORK_TYPE_GPRS:
            case TelephonyManager.NETWORK_TYPE_EDGE:
            case TelephonyManager.NETWORK_TYPE_CDMA:
            case TelephonyManager.NETWORK_TYPE_1xRTT:
            case TelephonyManager.NETWORK_TYPE_IDEN:
                return str2G;
            case TelephonyManager.NETWORK_TYPE_UMTS:
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
            case TelephonyManager.NETWORK_TYPE_HSDPA:
            case TelephonyManager.NETWORK_TYPE_HSUPA:
            case TelephonyManager.NETWORK_TYPE_HSPA:
            case TelephonyManager.NETWORK_TYPE_EVDO_B:
            case TelephonyManager.NETWORK_TYPE_EHRPD:
            case TelephonyManager.NETWORK_TYPE_HSPAP:
                return str3G;
            case TelephonyManager.NETWORK_TYPE_LTE:
                return str4G;
            default:
                return "Unknown";
        }
    }

    private String getNetworkConnectionType(Context context) {
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);


        boolean isMobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                .isConnectedOrConnecting();
        boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                .isConnectedOrConnecting();

        if (isMobile)
            return strMobile;
        else if (isWifi)
            return strWiFi;
        else
            return "No connection";

    }
}
Итак, прошел год, как я проработала в компании Анлим. Много было сделано за этот год. Еще больше я узнала и бо'льшим заинтересовалась.
Но с этими объемами было было очень сложно выделить время на запись некоторых интересных находок и разработок.

Что ж, вернемся к изначальной идее)

пятница, 1 ноября 2013 г.

Как получить адрес по координатам

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;
 }

среда, 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;