프로그래밍 방식으로 응용 프로그램을 설치했습니다.
- 응용 프로그램이 장치에 이미 설치되어 있으면 응용 프로그램이 자동으로 열립니다.
- 그렇지 않으면 특정 응용 프로그램을 설치하십시오.
안내해주세요. 나도 몰라 감사.
프로그래밍 방식으로 응용 프로그램을 설치했습니다.
안내해주세요. 나도 몰라 감사.
답변:
이것으로 시도하십시오 :
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add respective layout
setContentView(R.layout.main_activity);
// Use package name which we want to check
boolean isAppInstalled = appInstalledOrNot("com.check.application");
if(isAppInstalled) {
//This intent will help you to launch if the package is already installed
Intent LaunchIntent = getPackageManager()
.getLaunchIntentForPackage("com.check.application");
startActivity(LaunchIntent);
Log.i("Application is already installed.");
} else {
// Do whatever we want to do if application not installed
// For example, Redirect to play store
Log.i("Application is not currently installed.");
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
}
return false;
}
}
허용 된 답변보다 다소 깨끗한 해결책 ( 이 질문을 기반으로 함 ) :
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
정적 유틸리티로 도우미 클래스에 넣었습니다. 사용 예 :
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
이 답변 은 앱이없는 경우 Play 스토어에서 앱을 가져 오는 방법을 보여줍니다. 그러나 Play 스토어가없는 기기에서는주의를 기울여야합니다.
위의 코드는 나를 위해 작동하지 않았습니다. 다음과 같은 접근법이 효과적이었습니다.
적절한 정보로 Intent 객체를 생성 한 후 다음 함수를 사용하여 Intent를 호출 할 수 있는지 확인하십시오.
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
진술 로 사용하는 사람들의 수를 놀라게합니다 ! 이것은 정답입니다
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
패키지 이름을 알고 있다면 try-catch 블록을 사용하거나 여러 패키지를 반복하지 않고 작동합니다.
public static boolean isPackageInstalled(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
if (intent == null) {
return false;
}
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return !list.isEmpty();
}
return !list.isEmpty();
더 자바 스타일 친화적 인 것입니다
이 코드는 앱이 설치되어 있는지 확인하고 활성화되어 있는지 확인합니다.
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return pm.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}
try / catch 패턴을 사용하는 것은 성능이 좋지 않다고 생각합니다. 나는 이것을 사용하는 것이 좋습니다 :
public static boolean appInstalledOrNot(Context context, String uri) {
PackageManager pm = context.getPackageManager();
List<PackageInfo> packageInfoList = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
if (packageInfoList != null) {
for (PackageInfo packageInfo : packageInfoList) {
String packageName = packageInfo.packageName;
if (packageName != null && packageName.equals(uri)) {
return true;
}
}
}
return false;
}
허용 된 답변 ( AndroidRate 라이브러리 기반)보다 깨끗한 솔루션 (시도없이 ) :
public static boolean isPackageExists(@NonNull final Context context, @NonNull final String targetPackage) {
List<ApplicationInfo> packages = context.getPackageManager().getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if (targetPackage.equals(packageInfo.packageName)) {
return true;
}
}
return false;
}
kotlin을 사용하여 앱이 Android에 설치되어 있는지 확인하십시오.
kotlin 확장 만들기
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
이제 앱 설치 여부를 확인할 수 있습니다
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
이 코드는 패키지 이름으로 응용 프로그램의 날씨를 확인하는 데 사용되며 그렇지 않은 경우 설치된 앱의 Playstore 링크를 엽니 다.
String your_apppackagename="com.app.testing";
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo = null;
try {
applicationInfo = packageManager.getApplicationInfo(your_apppackagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (applicationInfo == null) {
// not installed it will open your app directly on playstore
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + your_apppackagename)));
} else {
// Installed
Intent LaunchIntent = packageManager.getLaunchIntentForPackage(your_apppackagename);
startActivity( LaunchIntent );
}
Kotlin을 사용한 간단한 구현
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
그리고 이것을 다음과 같이 호출하십시오 (Spotify 앱을 찾으십시오).
packageManager.isAppInstalled("com.spotify.music")
모든 답변은 특정 앱이 설치되어 있는지 확인합니다. 그러나 우리 모두 알다시피 사용자가 앱을 설치할 수는 있지만 사용할 수 없게됩니다.
따라서이 솔루션은 두 가지를 모두 확인합니다. 즉, 설치 및 활성화 된 앱 .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
메소드를 호출하십시오 isPackageInstalled()
.
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
이제 부울 변수를 사용하고 isAppInstalled
원하는대로 수행하십시오.
if(isAppInstalled ) {
/* do whatever you want */
}
다른 문제에 대한 멋진 답변. 예를 들어 "com.myapp.debug"와 "com.myapp.release"를 구별하지 않으려면!
public static boolean isAppInstalled(final Context context, final String packageName) {
final List<ApplicationInfo> appsInfo = context.getPackageManager().getInstalledApplications(0);
for (final ApplicationInfo appInfo : appsInfo) {
if (appInfo.packageName.contains(packageName)) return true;
}
return false;
}