Когда дело доходит до настройки Android, средство запуска — это Святой Грааль. Вот где это. Это главный козырь, который у Android всегда был по сравнению с iOS. Это то, что делает Android наиболее настраиваемой операционной системой практически на любой платформе.
Читать далее: Лучшие разработчики приложений для Android для создания приложений и создания их с нулевым кодом
Когда дело доходит до настройки Android, средство запуска — это Святой Грааль.
Как вы могли бы создать свою собственную программу запуска Android? Прочтите этот пост и предстоящую вторую часть — вот как!
План игры
Очевидно, что создание средства запуска Android — это довольно глубокий проект с большим количеством факторы. Он почти всегда работает, поэтому в нем должно быть как можно больше ошибок.
Никакого давления!
Было бы слишком сложно сделать полное руководство здесь. Вместо этого я собираюсь рассмотреть все важные функции, необходимые для превращения любого приложения в средство запуска, и предоставлю вам возможность собрать их все вместе и добавить свой собственный вкус. (вторая часть будет включать полный исходный код для очень простого каркаса пусковой установки!)
Пусковая установка работает почти постоянно, что означает, что он должен быть максимально свободным от ошибок, насколько это возможно!
Прежде чем взяться за этот проект, вам потребуются некоторые базовые знания. С этой целью я рекомендую этот пост о создании вашего первого приложения от Гэри Симса.
Что нужно приложению, чтобы стать лаунчером?
- Он должен быть сопоставлен с кнопкой «Домой» и запускаться при запуске вашего устройства.
- Он должен отображать пользовательские обои.
- Он должен отображаться и запускаться приложений с главного экрана и из панели приложений.
- Для этого нужно несколько экранов, по которым вы можете прокручивать.
- Для этого нужны виджеты.
Есть еще кое-что, но если вы сумеете усвоить эти основы, то у вас все будет хорошо. Давайте погрузимся в процесс создания панели запуска на главном экране!
Создайте новый проект с пустым действием, а затем выполните следующие действия.
Манифест Android
Первый пункт нашей повестки дня — превратить наше приложение в средство запуска. Это означает, что система Android идентифицирует его как таковой, загружает его при первой загрузке и показывает его всякий раз, когда вы нажимаете кнопку «домой».
Это просто — вам просто нужно добавьте следующие две строки в файл манифеста Android внутри тега активности:
Теперь у вас будет возможность выбрать это приложение в качестве средства запуска. Технически это означает, что это пусковая установка.
Это было просто!
Прямо сейчас , это не похоже на большую часть средства запуска, поэтому следующее, что нужно сделать, — это добавить пользовательские обои. Это тоже довольно просто. Вам просто нужно добавить следующий код в свой styles.xml в папке ресурсов.
true @ android: color/transparent
Добавлена всего пара строк, и у нас есть что-то, что выглядит и ведет себя как средство запуска. Я бы сказал, что это хорошее начало!
Как запускать приложения
Запускать приложения очень просто. с помощью намерений. Намерения позволяют нам запускать действия, приложения, функции и т. д. В этом случае мы собираемся запустить Google Chrome, используя его имя пакета, то есть com.android.chrome .
Для этого вам просто понадобится этот код:
Intent launchIntent = getPacka geManager (). getLaunchIntentForPackage ("com.android.chrome"); startActivity (launchIntent);
Не забудьте импортировать класс Intent (выберите его и нажмите alt + return когда подчеркнуто). Мы могли бы добавить кнопку вместо TextView в наш XML-код макета и настроить его для запуска Chrome. Мы также могли бы использовать это как отличный способ легко установить любое приложение в качестве «дома» по умолчанию. Поместите это в метод onCreate или onResume , и каждый раз, когда вы нажимаете кнопку домой, вы запускаете Chrome или приложение по вашему выбору!
Но, вероятно, это не то, что хотелось бы делать большинству. Вместо этого давайте займемся кнопкой. Мы будем использовать ImageView и присвоить ему идентификатор chromeButton . Выбирайте пока любое изображение. Я выбрал звезду.
Теперь добавьте onClick :
public void onChromeButtonClick (View v) {Intent launchIntent = getPackageManager ( ) .getLaunchIntentForPackage ("com.android.chrome"); startActivity (launchIntent); }
Разве не было бы лучше, если бы мы могли использовать правильный значок? Сюрприз! мы можем.
Для этого вам нужно перепроектировать удобный метод для захвата значка из любого приложения и возврата его как доступного для рисования:
public static Drawable getActivityIcon (Context context, String packageName, String activityName) {PackageManager pm = context.getPackageManager (); Intent intent = new Intent (); intent.setComponent (новый ComponentName (packageName, activityName)); ResolveInfo resolveInfo = pm.resolveActivity (intent, 0); return resolveInfo.loadIcon (pm);}
После этого мы можем просто установить значок так, как нам нравится, в onCreate () :
ImageView chromeIcon = (ImageView) findViewById (R.id. chromeButton ); chromeIcon. setImageDrawable (this, getActivityIcon ("com.android.chrome", "com.google.android.apps.chrome.Main"));
При использовании этого метода вам потребуются оба имени пакета и название действия. Я использую приложение под названием Package Names Viewer , чтобы получить их. Мы скоро узнаем, как сделать это динамически.
Я использовал общедоступный статический метод, поэтому он доступен из других классов без создания нескольких экземпляров нашего MainActivity . Этот метод, вероятно, окажется полезным.
Вы уже создали достаточно приложения, чтобы сделать что-то полезное. Вы можете очень легко создать программу запуска, например, просто показывая ваши любимые приложения в строке. Большинство людей захотят быть немного более амбициозными.
Как создать панель приложений
Теперь, когда мы можем показать и запустить одно приложение, мы должны иметь возможность показать и запустить все приложения. Нам просто нужно получить список всех имен пакетов на устройстве, просмотреть его и загрузить значки в представление ресайклера.
Создать новое действие в ваш проект и назовите файлы java и xml AppsDrawer.java и apps_drawer.xml соответственно. Убедитесь, что у вас есть способ запустить и это второе действие. Я добавил небольшую кнопку меню внизу экрана.
Здесь мы собираемся отобразить список (представление ресайклера), который просто покажет все наши значки и позволит нашему пользователю выбрать их, чтобы запустить приложение по своему выбору. Добавьте представление ресайклера в apps_drawer.xml и присвойте ему идентификатор appsList .
Добавление представления ресайклера — совсем другое вещь, так что я не буду вдаваться в подробности. Вместо этого ознакомьтесь с этим руководством по представлениям ресайклера и используйте те же имена для моих файлов ресурсов и представлений, что и я там. В конце концов, есть способ этого безумия!
Создайте отдельный XML-файл для макета элементов в вашей строке и новый класс адаптера для заполнения представления ресайклера. Вам также необходимо создать еще один класс с именем appInfo , у которого будет самый простой интерфейс, который только можно вообразить:
public class AppInfo {CharSequence label; CharSequence packageName; Значок Drawable;}
Как вы могли догадаться, мы будем использовать его только для хранения информации о приложениях в нашем списке.
Теперь создайте свой класс адаптера и добавьте следующий код:
открытый класс RAdapter расширяет RecyclerView.Adapter {private List appsList; открытый класс ViewHolder расширяет RecyclerView.ViewHolder реализует View. OnClickListener {общедоступный TextView textView; общедоступный ImageView img; //Это подкласс ViewHolder, который просто//«содержит представления», которые мы можем показать в каждой строке public ViewHolder (View itemView) {super (itemView); //Находит представления из нашего row.xml textView = (TextView) itemView.findViewById (R.id. text ); img = (ImageView) itemView.findViewById (R.id. img ); itemView.setOnClickListener (это); } @Override public void onClick (View v) {int pos = getAdapterPosition (); Контекст context = v.getContext (); Намерение launchIntent = context.getPackageManager (). GetLaunchIntentForPackage (appsList.get (pos) .packageName.toString ()); context.startActivity (launchIntent); Toast. makeText (v.getContext (), appsList.get (pos) .label.toString (), Toast. LENGTH_LONG ) .show (); }} Public RAdapter (Context c) {//Здесь мы создаем наш список деталей приложения, используя//объект app, который мы создали для хранения метки, имени пакета и значка PackageManager pm = c.getPackageManager (); appsList = новый список массивов (); Intent i = новое намерение (Intent. ACTION_MAIN , null); i.addCategory (Intent. CATEGORY_LAUNCHER ); Список allApps = pm.queryIntentActivities (i, 0); для (ResolveInfo ri: allApps) {AppInfo app = new AppInfo (); app.label = ri.loadLabel (pm); app.packageName = ri.activityInfo.packageName; app.icon = ri.activityInfo.loadIcon (pm); appsList.add (приложение); }} @Override public void onBindViewHolder (RAdapter.ViewHolder viewHolder, int i) {//Здесь мы используем информацию из созданного нами списка для определения представлений String appLabel = appsList.get (i) .label.toString (); Строка appPackage = appsList.get (i) .packageName.toString (); Возможность рисования appIcon = appsList.get (i) .icon; TextView textView = viewHolder.textView; textView.setText (appLabel); ImageView imageView = viewHolder.img; imageView.setImageDrawable (appIcon); } @Override public int getItemCount () {//Этот метод необходимо переопределить, чтобы Android знал, сколько элементов//будет внесено в список return appsList.size (); } @Override public RAdapter.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {//Это то, что добавляет код, который мы здесь написали, в наше целевое представление LayoutInflater inflater = LayoutInflater. from ( parent.getContext ()); Просмотр view = inflater.inflate (R.layout. строка , родительский, false); ViewHolder viewHolder = новый ViewHolder (просмотр); return viewHolder; }}
Не забудьте импортировать все классы по мере необходимости. Проверьте комментарии, чтобы получить дополнительную информацию о том, что все делает. Я настоятельно рекомендую прочитать эту публикацию Recycler View, если вы еще не знакомы.
Это основной уникальный бит:
PackageManager pm = c.getPackageManager () ; appsList = новый список массивов (); Intent i = новое намерение (Intent. ACTION_MAIN , null); i.addCategory (Intent. CATEGORY_LAUNCHER ); Список allApps = pm.queryIntentActivities (i, 0); для (ResolveInfo ri: allApps) {AppInfo app = new AppInfo (); app.label = ri.loadLabel (pm); app.packageName = ri.activityInfo.packageName; app.icon = ri.activityInfo.loadIcon (pm); appsList.add (приложение); }
Это просто перебирает наши работающие установленные приложения и берет оттуда необходимые детали, значки и многое другое.
Конечно, row. xml включает представление изображения ( img ) и текстовое представление ( textView ), которые становятся нашим значком и ярлыком нашего приложения.
Между тем, onClickListener добавлен в держатель представления позволяет нам запускать приложение при нажатии — как настоящий лаунчер!
Следующие шаги
На данный момент конец виден, и вы ‘ приближаемся к полнофункциональной пусковой установке! Но еще кое-что осталось сделать.
Во второй части мы разместим наше представление ресайклера в отдельном потоке, чтобы все работало оперативно. После этого мы добавим несколько домашних экранов для пролистывания фрагментов и быстро рассмотрим, как размещать виджеты.
Следите за обновлениями второй части и не забудьте задать свои вопросы ниже!
Обновление: Как для создания настраиваемой панели запуска в Android Studio — Часть вторая