Чтобы справиться с изменением ориентации и работать соответственно, я сделал следующее:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.i("SCREEN DP","Orientation:"+ getResources().getConfiguration().orientation +" Width = "+getWidthDp());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i("SCREEN DP","Orientation:"+ newConfig.orientation +" Width = "+getWidthDp());
}
public float getWidthDp(){
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
return displayMetrics.widthPixels / displayMetrics.density;
}
}
Журналы показывают:
I/SCREEN DP: Orientation:1 Width = 411.42856
I/SCREEN DP: Orientation:2 Width = 683.4286
I/SCREEN DP: Orientation:1 Width = 411.42856
I/SCREEN DP: Orientation:2 Width = 683.4286
Не забудьте добавить android:screenOrientation="fullSensor"
в манифест, чтобы иметь возможность обрабатывать все ориентации.
Используйте базу данных геолокации IP (некоторые свободны), и $ _SERVER ["REMOTE_ADDR"] для получения IP-адреса посетителя.
http://www.maxmind.com/app/geolitecity является бесплатной (менее точной) версией коммерческой.
Как Gilles, я использовал материал GeoIP MaxMind для этого в прошлом - настроенный с расширением PECL для скорости. Это работает обоснованно хорошо, но...
Требование для такого рода вещи имеет тенденцию прибывать от кого-то, который не понимает, что невозможно надежно определить местоположение посетителей таким образом. Очень важно, что человек, просящий его быть поощренным понять, что это почти бесполезно. Типичная вещь, которая происходит с геолокацией в этом:
Клиент: Я хочу смочь ограничить содержание IP
Dev: Вы действительно знаете, что это невозможно сделать надежно?
Клиент: А-ч да, но эта компания говорит, что они продадут мне что-то, что сделает это
Dev: Да, но это не точно и легко обойти и обычно указывает на плохую бизнес-модель для основанного на Интернете содержания
Клиент:Вы можете это сделать?
Dev:Без разницы...
... Шесть месяцев спустя...
Клиент: Некоторые мои посетители жаловались, что не видят мое содержание и некоторых плохих людей, которые не должны видеть, что он смог к!
Dev: / меня хлопает голову
Это - только один шаг на оттуда к, "может я иметь его так, чтобы, когда пользователь щелкает правой кнопкой в их браузере, немного знака открылось, говоря, что 'эти изображения являются авторским правом Idiot Inc'.?"
Извините, очевидно, в циничном настроении сегодня!
Оба из ответов (геолокация, агент пользователя) будут работать, но могут быть побеждены. Кто-то может использовать прокси-сервер или изменить их агент пользователя. Firefox даже имеет плагин с этой целью.
Существуют определенные классы, которые могут обнаружить локаль агента пользователя. Попробуйте что-то как этот. Платформа зенда имеет большой класс для этого Zend_Locale