Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/30: Рейтинг темы: голосов - 30, средняя оценка - 5.00
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655

Как при запуске проверить включен ли обычный интернет?

01.11.2012, 17:00. Показов 6476. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Как при запуске проверить включен ли обычный интернет? То есть Передача данных. Спасибо, за ответы
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.11.2012, 17:00
Ответы с готовыми решениями:

Как проверить, включен ли checkbox
Подскажите пожалуйста, как правильно и короче сделать запись в JS, при проверке, включен checkbox или нет. <input...

Как проверить, включён ли PC Speaker?
не воспроизводиться пищяние в дос режиме на паскале что делать

Как проверить включен bluetooth или нет?
Как проверить включен bluetooth или нет? Если да то одно действие а если нет то другое.

27
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
02.11.2012, 11:58
1. Создаём класс наследник BroadcastReceiver
Java
1
public class NetworkReceiver extends BroadcastReceiver
2. В манифесте в теге Application указываем
XML
1
2
3
4
5
<receiver android:name=".NetworkReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
 </receiver>
3. Для удобства можно применить паттерн Observer-Observable. Делаем в нашем ресивере внутренний класс
Java
1
2
3
4
5
6
public class InnerObservable extends Observable{
        public void updateData(String data){
            setChanged();
            notifyObservers(data);
        }
}
4. Классы делаем Singleton. Теперь нам ещё нужен контекст.

Java
1
2
3
Context context;
public static NetworkReceiver instance = new NetworkReceiver();
public static InnerObservable observable = instance. new InnerObservable();
5. Добавляем методы "включения-выключения" обсёрвера
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static NetworkReceiver getInstance(){
        return instance;
    }
    
    public void setContext(Context context){
        
         try {
            observable.deleteObserver((Observer) context);
        } catch (Exception e) {
            Log.d("Exceptiion", "in set context");
        }
         this.context = context;
         observable.addObserver((Observer) context);
    }
    
    public void removeInetObserve(Context c){
        observable.deleteObserver((Observer) c);
    }
6. Осталось переопределить метод onReceive:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
    public void onReceive(Context ctx, Intent intent) {
        Log.d("tag", "onReceive");
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (info.isConnected()) {
                Log.d("Net", "Connected");
                observable.updateData(NETWORK_ENABLE);
            } else if (!info.isConnected()) {
                observable.updateData(NETWORK_DISABLE);
                Log.d("Net", "Disconnected");       
            }       
    }
В принципе, наш класс готов. Чтобы начать с ним работу, нужно зарегистрироваться, как слушатель.
Наша активити должна быть
Java
1
implements Observer
Включаем:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
    protected void onStart() {
        super.onStart();    
        mNetworkReceiver = NetworkReceiver.getInstance();
        mNetworkReceiver.setContext(this);
        mNetworkStateChangedFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mNetworkReceiver, mNetworkStateChangedFilter);
    }
 
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        try {
            mNetworkReceiver.removeInetObserve(this);
        } catch (Exception e) {
            // TODO: handle exception
        }
        try {
            unregisterReceiver(mNetworkReceiver);
        } catch (Exception e) {
 
        }
    }
и сразу переопределим метод update:
Java
1
2
3
4
5
6
7
8
9
public void update(Observable observable, Object data) {
        if (!observable.getClass().equals(NetworkReceiver.InnerObservable.class))
            return;
        if (data.equals(NETWORK_ENABLE)) {          
            Log.d("network", "Enabled");
        } else if (data.equals(NETWORK_DISABLE)) {
            Log.d("network", "Disabled");
        }
    }
Чуть не забыл, в манифест выставим нужные премишены

XML
1
2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
02.11.2012, 13:13  [ТС]
Ого, сколько всего. Спасибо, буду пробовать. На проверку включен ли GPS понадобилось всего около 15 строк
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 13:19
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
02.11.2012, 13:23  [ТС]
Цитата Сообщение от V0v1k Посмотреть сообщение
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
Ну а как при запуске проверить включен или нет? Чтоб при запуске выпал AlertDialog с кнопками Да и Нет. То есть перейти к Настройкам или не включать
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 13:33
тем методом который вы процитировали.
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
02.11.2012, 22:56  [ТС]
Цитата Сообщение от V0v1k Посмотреть сообщение
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
Что-то я не понял смысл этого кода. Ничего не происходит
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 23:04
Цитата Сообщение от Digetix Посмотреть сообщение
Что-то я не понял смысл этого кода.
он проверяет связь с интернетом.

Цитата Сообщение от Digetix Посмотреть сообщение
Ничего не происходит
а что должно происходить?
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
03.11.2012, 00:58  [ТС]
Цитата Сообщение от V0v1k Посмотреть сообщение
а что должно происходить?
Если Передача данных не включена, то предложить пользователю перейти в Настройки и включить Передача данных
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.11.2012, 01:01
ну так предложите.
0
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
03.11.2012, 11:59
V0v1k, однако стальные у тебя нервы, я сначала пытался отвечать, но потом понял что будут бесконечно спрашивать "почему мой хэлоуворлд не запускается".

YuraAAA, дорогой мой коллега:
0 регистрация ресивера в манифесте для подобных целей очень вредна! он будет срабатывать даже когда ваша программа не запущена. приложение будет висеть в памяти.
1 для цели, которую преследует автор, более чем достаточно просто динамически регистрировать ресивер в onStart и анрегистерить в onStop.
2 вместо неуместного паттерна Observable я бы вам порекомендовал выучить нормально синглтон. В Android надо учитывать мультипоточность.
3 Обычно программисты пытаются свести к минимуму держание в качестве переменной контекста. Это может приводить к мемориликам.
4 Когда нужен контекст Апликейшна - его обычно и передают. А когда нужен контекст для UI-related операций - передюат this.

просто знать API не достаточно.
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
03.11.2012, 13:55  [ТС]
Цитата Сообщение от YAUHEN Посмотреть сообщение
V0v1k, однако стальные у тебя нервы, я сначала пытался отвечать, но потом понял что будут бесконечно спрашивать "почему мой хэлоуворлд не запускается".
Ну так V0v1k реально помогает, а не критикует, что там и как кто спросил. Если вас напрягает "почему мой хэлоуворлд не запускается", то не отвечайте на такие темы.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.11.2012, 16:35
Цитата Сообщение от YAUHEN Посмотреть сообщение
однако стальные у тебя нервы
да уже начали сдавать, так как в последнее время много глупых вопросов)
0
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
02.02.2013, 16:20
Цитата Сообщение от V0v1k Посмотреть сообщение
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
а как сделать чтоб проверял соединение каждые 5 минут????

Добавлено через 3 минуты
Цитата Сообщение от Digetix Посмотреть сообщение
Ого, сколько всего. Спасибо, буду пробовать. На проверку включен ли GPS понадобилось всего около 15 строк
не подскажите где прочитать или найти код для нахождения координат по gps и узнать инфу про телефон(номер телефона, номер биоса, врем я и дату). одним словом системную информацию. Спасибо заранее.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.02.2013, 22:32
Цитата Сообщение от G_O_R Посмотреть сообщение
а как сделать чтоб проверял соединение каждые 5 минут????
не нужно проверять каждые 5 мин, достаточно отлавливать изменения конекшена - http://stackoverflow.com/quest... id-example


Цитата Сообщение от G_O_R Посмотреть сообщение
нахождения координат по gps
вот целый туториал - http://www.vogella.com/article... ticle.html


Цитата Сообщение от G_O_R Посмотреть сообщение
узнать инфу про телефон
http://developer.android.com/r... Build.html


Цитата Сообщение от G_O_R Посмотреть сообщение
номер телефона
TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystem Service(Context.TELEPHONY_SERVICE);
mPhoneNumber = tMgr.getLine1Number();


Цитата Сообщение от G_O_R Посмотреть сообщение
врем я и дату
Calendar.getInstance().getTime()
1
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
03.02.2013, 10:05
Цитата Сообщение от V0v1k Посмотреть сообщение
не нужно проверять каждые 5 мин, достаточно отлавливать изменения конекшена - http://stackoverflow.com/quest... id-example



вот целый туториал - http://www.vogella.com/article... ticle.html



http://developer.android.com/r... Build.html



TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystem Service(Context.TELEPHONY_SERVICE);
mPhoneNumber = tMgr.getLine1Number();



Calendar.getInstance().getTime()
Спасибо большое) может посоветуйте книгу на русском чтоб все было описано на примерах. а то несколько скачал, вроде разные авторы но во всех одно и тоже и один и тот же пример, про кнопки, анимацию и тд.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.02.2013, 22:06
сам я по этому учился:
http://developer.android.com/g... index.html
http://developer.android.com/r... kages.html
1
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
05.02.2013, 18:11
Цитата Сообщение от V0v1k Посмотреть сообщение
спасибо еще раз)

у меня проблема в сервисом. он не запускается почему то. в программе один сервис. нет форм. должен работать в фоне, при остановке запускаться, стоять в автозугрузке, находить координаты gps и проверить интернет включен ли. все части кода из книг и статей взято. в диспетчере нет моего сервиса в запуске, но после запуска появяется сервис gps/ значит запускается и остановливается. если кто может помогите чтоб он сработал. вот сам код

package com.sample.family_safety;


import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;


public class FAMILY_SAFETY extends Service {
// FamilySafety fSafety;


@Override
public void onCreate() {
// инициализация службы при создании

startService(new Intent(this, FAMILY_SAFETY.class));

}

@Override
public IBinder onBind(Intent intent) {
// действия при связывании клиента со службой
return null;
}



@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// действия при запуске .службы
if ((flags & START_FLAG_RETRY) == 0) {
// TODO Если это повторный запуск, выполнить какие-то действия.
}
else {
// TODO Альтернативные действия в фоновом режиме.
}
return Service.START_STICKY;
}





/////////////////////////////////////////////////////////////
// получение gps координат

LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(contex t);
String provider = LocationManager.GPS_PROVIDER;
Location location =
locationManager.getLastKnownLocation(pro vider);
updateWithNewLocation(location);
}
private void updateWithNewLocation(Location location) {}

String latLongString;
// TextView myLocationText;
myLocationText = findViewById(R.id.myLocationText);
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
} else {
latLongString = "No location found";
}
myLocationText.setText("Your Current Position is:\n" +
latLongString);

}


///////////////////////////////////////////////////////////////////
// обновление данных gps каждый 10 минут или 10 метров

String provider = LocationManager.GPS_PROVIDER;
int t = 3000000; // миллисекунды
int distance = 10; // meters
LocationListener myLocationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Обновите приложение, основываясь на данных местоположения.
}
public void onProviderDisabled(String provider){
// Обновите приложение, если источник отключен.
}
public void onProviderEnabled(String provider){
// Обновите приложение, если источник включен.
}
public void onStatusChanged(String provider, int status,
Bundle extras){
// Обновите приложение, если состояние аппаратного обеспечения
источника изменилось.
}
};
locationManager.requestLocationUpdates(p rovider, t, distance,
myLocationListener);

///////////////////////////////////////////////////////////////////////////
// проверка состояния интернета(вкл/выкл)

public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager)getSystemService(Co ntext.CONNECTIVITY_SERVICE);
NetworkInfo nInfo = cm.getActiveNetworkInfo();
if (nInfo != null && nInfo.isConnected()) {
Log.v("status", "ONLINE");
return true;
}
else {
Log.v("status", "OFFLINE");
return false;
}
}

//////////////////////////////////////////////////////////////////////////////////////
// добавление сервиса в автозагрузку

public class MyBroadReceiv extends BroadcastReceiver {

final String LOG_TAG = "myLogs";

public void onReceive(Context context, Intent intent) {
Log.d(LOG_TAG, "onReceive " + intent.getAction());
context.startService(new Intent(context, FAMILY_SAFETY.class));
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// повышение приоритета сервиса, чтобы система не убиывала


private static final Class<?>[] mSetForegroundSignature = new Class[] {
boolean.class};
private static final Class<?>[] mStartForegroundSignature = new Class[] {
int.class, Notification.class};
private static final Class<?>[] mStopForegroundSignature = new Class[] {
boolean.class};

private NotificationManager mNM;
private Method mSetForeground;
private Method mStartForeground;
private Method mStopForeground;
private Object[] mSetForegroundArgs = new Object[1];
private Object[] mStartForegroundArgs = new Object[2];
private Object[] mStopForegroundArgs = new Object[1];

void invokeMethod(Method method, Object[] args) {
try {
method.invoke(this, args);
} catch (InvocationTargetException e) {
// Should not happen.
Log.w("ApiDemos", "Unable to invoke method", e);
} catch (IllegalAccessException e) {
// Should not happen.
Log.w("ApiDemos", "Unable to invoke method", e);
}
}

/**
* This is a wrapper around the new startForeground method, using the older
* APIs if it is not available.
*/
void startForegroundCompat(int id, Notification notification) {
// If we have the new startForeground API, then use it.
if (mStartForeground != null) {
mStartForegroundArgs[0] = Integer.valueOf(id);
mStartForegroundArgs[1] = notification;
invokeMethod(mStartForeground, mStartForegroundArgs);
return;
}

// Fall back on the old API.
mSetForegroundArgs[0] = Boolean.TRUE;
invokeMethod(mSetForeground, mSetForegroundArgs);
mNM.notify(id, notification);
}

/**
* This is a wrapper around the new stopForeground method, using the older
* APIs if it is not available.
*/
/*
void stopForegroundCompat(int id) {
// If we have the new stopForeground API, then use it.
if (mStopForeground != null) {
mStopForegroundArgs[0] = Boolean.TRUE;
invokeMethod(mStopForeground, mStopForegroundArgs);
return;
}

// Fall back on the old API. Note to cancel BEFORE changing the
// foreground state, since we could be killed at that point.
mNM.cancel(id);
mSetForegroundArgs[0] = Boolean.FALSE;
invokeMethod(mSetForeground, mSetForegroundArgs);
}

*/
@Override
public void onCreate() {
mNM = (NotificationManager)getSystemService(NO TIFICATION_SERVICE);
try {
mStartForeground = getClass().getMethod("startForeground",
mStartForegroundSignature);
mStopForeground = getClass().getMethod("stopForeground",
mStopForegroundSignature);
return;
} catch (NoSuchMethodException e) {
// Running on an older platform.
mStartForeground = mStopForeground = null;
}
try {
mSetForeground = getClass().getMethod("setForeground",
mSetForegroundSignature);
} catch (NoSuchMethodException e) {
throw new IllegalStateException(
"OS doesn't have Service.startForeground OR Service.setForeground!");
}
}

@Override
public void onDestroy() {
// Make sure our notification is gone.
stopForegroundCompat(R.string.foreground _service_started);
}


////////////////////////////////////////////////////////////////////////////////////////////////////
}

}
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.02.2013, 18:54
ну подебагай...
кстати слышал про новые полиси, что нужно хоть что-то юзеру показать(диалог с сообщением каким-то, что сервис мол запущен) иначе не будет работать сервис, но мне с этим еще не приходилось сталкиваться.
0
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
06.02.2013, 09:08
Цитата Сообщение от V0v1k Посмотреть сообщение
ну подебагай...
кстати слышал про новые полиси, что нужно хоть что-то юзеру показать(диалог с сообщением каким-то, что сервис мол запущен) иначе не будет работать сервис, но мне с этим еще не приходилось сталкиваться.
нет не слышал. я думал это просто рекомендации. но в моей проге нельзя чтоб пользователь видел иначе теряет смысл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2013, 09:08
Помогаю со студенческими работами здесь

Как проверить, что RadioButton включен. MVVM
Есть радио баттон на форме как узнать чекнут ли он, реализовать шаблоном MVVM? Помогите плз

Как выделить жырним и проверить включен ли чекбокс?
Есть форма для регистрацыи После заполнения письмо, которое отправлиется формируется вот так: $mess = ' Імя: '.$_POST.' ...

Как проверить, заданы ли аргументы при запуске программы?
Как проверить, заданы ли аргументы при запуске программы?

Как проверить, есть ли подключение к БД при запуске приложения?
Проверять при крите главной формы, разумеется нельзя, т.к. datamodule запускается первым, иначе будет Access Volation... Т.е. получается...

Файл при запуске по двойному щелчку мыши не работает как при запуске в терминале
Есть текстовый файл Goodgame.sh с таким кодом: xclip -o &gt; clipboard.txt file=&quot;/home/user/clipboard.txt&quot; while read line do #...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru