Как открыть другие приложения на Android

Много раз мы хотим открыть стороннее приложение. Например, по рекламе мы можем определить, установлено ли приложение. Если оно установлено, оно перейдет на домашнюю страницу приложения. Если оно не установлено, он перейдет на страницу сведений о приложении в магазине приложений.
Тогда поговорим о нескольких решениях для открытия домашней страницы сторонних приложений.

Переход по имени пакета

Знайте, что существует три типа перехода имени пакета:

a.packageManager.getLaunchIntentForPackage(packageName: String)

код показан ниже

 fun startAppWithPackageName(context: Context, packageName: String) {
    
    
 	//根据包名获取启动首页的intent 这个intent有可能为空
        val intent = context.packageManager.getLaunchIntentForPackage(packageName)
        if (intent != null) {
    
    
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            context.startActivity(intent)
        }
 }

Глядя на имя метода, вы можете знать, что намерение здесь состоит в том, чтобы получить класс, категория которого — Запуск в имени пакета через PackageManager. Если такой класс не определен в приложении, естественно полученное намерение будет пустым. При этом точка, давайте расширим
:

Если все действия в файле манифеста приложения не имеют
<category android:name="android.intent.category.LAUNCHER" />
, то значок приложения будет скрыт на рабочем столе мобильного устройства. Конечно, следующие настройки должны быть быть установлен в основном действии <intent-filter>

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Б. Также узнайте конкретное имя класса активности в приложении.

fun startAppWithPackageName(context: Context, packageName: String, activityName: String) {
    
    
	//activityName 举例:com.google.app.MainActivity
	val intent = Intent().apply {
    
    
            component = ComponentName(packageName, activityName)
            flags = Intent.FLAG_ACTIVITY_NEW_TASK
        }
        context.startActivity(intent)
}

в.Проскочить схему в Ури

Когда вы знаете имя пакета и схему стороннего приложения, вы можете открыть приложение по следующей схеме.Код
выглядит следующим образом:

 val intent = Intent().apply {
    
    
      data = Uri.parse("scheme://authorty?query")
      setPackage(packageName)
      setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 }
 context.startActivity(intent)

На что следует обратить внимание:
Схема должна быть объявлена ​​в стороннем приложении. Если несколько сторонних приложений устанавливают одну и ту же схему, вы должны установить setPackage(packageName), если хотите перейти к указанному приложению.

Развернуть

Если вы будете осторожны, вы обнаружите, что я установил setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) для трех вышеуказанных методов запуска.

Так какова же функция этого флага?

На самом деле этот флаг чаще используется при переходах активности, что означает, что если класс существует в стеке, класс будет запущен непосредственно в стеке, в противном случае для запуска класса будет создан новый стек.

Тогда этот флаг также имеет ту же функцию при запуске приложения: рассматривать всю систему Android как приложение, в котором разные приложения выполняют разные действия. Разница в том, что если приложение уже запущено, использование этого флага приведет только к вызову приложение, если приложение не запущено, оно будет запущено.

Затем, если мы запустим приложение, мы передадим много параметров. Как правило, приложение будет получать и обрабатывать эти параметры на стартовой странице. Затем мы используем указанный выше FLAG_ACTIVITY_NEW_TASK. Когда приложение активно, оно только разбудит приложение и не переходить на стартовую страницу.Тогда как перезапустить приложение?

Intent.FLAG_ACTIVITY_CLEAR_TASK будет работать. Мы можем перезапустить приложение, установив следующее при запуске.

setFlags(Intent.FLAG_ACTIVITY_NEW_TASK или Intent.FLAG_ACTIVITY_CLEAR_TASK)

Примечание. Intent.FLAG_ACTIVITY_CLEAR_TASK действителен, только если он установлен одновременно с Intent.FLAG_ACTIVITY_NEW_TASK.

Однако некоторые приложения могут перехватывать это событие перезапуска на стартовой странице, поэтому необходимо установить следующие действия, и это зависит от решения обработки стороннего приложения.
Решение о перехвате перезапуска:

Intent.flags и Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0

конец

На данный момент нам известны только три вышеуказанных решения для запуска новых приложений, если есть другие, укажите их в комментариях и давайте вместе добьемся прогресса.

Supongo que te gusta

Origin blog.csdn.net/qq_39734865/article/details/131751983
Recomendado
Clasificación