У меня есть приложение android, в котором я загружаю apk с веб-сервера и сохраняю его в локальном хранилище после сохранения во внешнем хранилище. Я открываю файл apk программно, а затем устанавливаю apk программно. Это мой код для программной установки приложения.
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(MainActivity.this, "com.ariaware.store.fileProvider", file_path); // Here filepath is location of apk file in local storage
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(file_path), "application/vnd.android.package-archive");
}
startActivityForResult(intent, INSTALL);
Этот код выводит меня на этот экран. Пожалуйста, посмотрите здесь. Есть два варианта установки и отмены на этом экране. Теперь пользователю необходимо нажать кнопку «Установить», чтобы установить приложение.
Чтобы перейти к следующему экрану, прежде чем нажать. Я запустил службу специальных возможностей, которая берет содержимое экрана и затем перемещается в соответствии с содержимым экрана. Это код для открытия служб специальных возможностей
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent,ACTION_ACCESSIBILITY_SETTINGS);
Это код службы, которую я использовал для автоматической установки.
if (nodeInfo != null) {
int childCount = nodeInfo.getChildCount();
if ("android.widget.Button".equals(nodeInfo.getClassName())) {
String nodeContent = nodeInfo.getText().toString();
Log.d("TAG", "content is " + childCount+nodeContent);
if (!TextUtils.isEmpty(nodeContent)
&&( "install".equals(nodeContent.toLowerCase())
|| "done".equals(nodeContent.toLowerCase())
|| "open".equals(nodeContent.toLowerCase())
)
) {
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
return true;
}
}
else if ("android.widget.ScrollView".equals(nodeInfo.getClassName())) {
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
}
for (int i = 0; i < childCount; i++) {
AccessibilityNodeInfo childNodeInfo = nodeInfo.getChild(i);
if (iterateNodesAndHandle(childNodeInfo)) {
return true;
}
}
}
Основная функция nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
, которая автоматически запускает установку. Посмотрите на эту ссылку. Здесь я разместил видео. Что происходит? Так что после просмотра видео вы узнаете, что он автоматически устанавливается, но после установки запрашивает открытие или готово ... Я хочу выйти из этого экрана. Я выполнил все эти действия, когда появляется экран с установленным приложением, но ничего не происходит
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_DISMISS);
Моя основная цель - двигаться вперед, когда приложение установлено. Оно не должно появиться на экране, если вы хотите открыть его или нет