需求:在应用中,能够获取推荐的应用列表,下载应用进行安装,且安装成功后会修改我当前的UI界面。
对于没有Root的机型,我的安装应用的方法就是下载APK到本地后,发送Intent请求,源码如下:
public static boolean installNormal(Context context, String filePath) {
Intent intent = new Intent(Intent.ACTION_VIEW);
File file = new File(filePath);
if (!file.exists() || !file.isFile() || file.length() < 0) {
return false;
}
LogUtil.e(TAG, "path=" + filePath);
intent.setDataAndType(Uri.parse("file://" + filePath),
"application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return true;
}
使用这种方式,我无法判断出用户最终是否选择安装了应用(因为用户可能取消安装),因此无法进行相关UI的修改。
所以,想问一下大家,使用intent的方法安装应用如何获取应用安装的结果?
我个人想了两种方式:
注册广播,但是使用广播是否应该动态注册?监听哪些intent?
写一个线程无限轮询,但是不清楚线程默认的结束时间等相关限制条件?
시스템 애플리케이션 설치 또는 업데이트 브로드캐스트 수신
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action. PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
마지막 줄은 다음과 같습니다. 추가하려면, 획득한 Intent, Intent.getDataString()에서 패키지 정보를 추출하고 어떤 애플리케이션인지 확인하세요
사용자가 설치를 하러 나갈 때 설치 또는 취소를 클릭해도 다시 돌아오면 onResume으로 이동합니다. 그런 다음 onResume에서 설치 상태를 판단합니다.
현재 APK를 덮어써서 설치하시면 모니터링이 불가능합니다. 본 프로그램과 다른 패키지명을 가진 다른 프로그램을 설치하시면 해당 방송을 확인하셔야 합니다. 공식 홈페이지입니다.