2014-07-14 3 views
4

나는 Play 스토어에서 다운로드하여 설치할 수있는 다양한 앱 목록을 제공하는 App을 보유하고 있습니다. 지금, 나는 사용자가 을 원하지 않습니다.은 이전에 설치된 응용 프로그램이고 은 내 응용 프로그램을 통해을 다시 다운로드하고 좋은 것을 얻습니다.특정 Android 앱이 이전에 설치되었는지 확인합니다.

특정 앱이 이전에 사용자의 기기에 설치되었는지 확인하는 방법이 있습니까?

업데이트 나는 관계없이 내 응용 프로그램이 설치되었을 때의 제거/설치된 모든 응용 프로그램에 관심이 있어요. 내 응용 프로그램 설치에 대한 데이터를 저장하고 싶지는 않습니다.이 데이터가 추가 참조를 위해 이미 장치에 저장되어 있는지 알고 싶습니다.

참고 나는 또한 제거한 앱에 관심이 있습니다. 이 데이터도 얻을 수 있습니까?

답변

0

이 조각은 당신이 장치에 설치된 응용 프로그램의 모든 주요 활동을 기록합니다, 당신은 단지

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
final List <ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0); 

for(ResolveInfo resolve : pkgAppsList) 
{ 
    Log.d("MY_APP", resolve.toString()); 
} 

는 희망이 도움이 주어진 앱이 목록을 확인해야합니다!

+0

첫째, 감사합니다! 이제는 현재 시스템에 설치된 앱 목록을 제공하지만 이전에 설치되었지만 현재는 제공되지 않는 앱을 ​​찾는 방법이 있습니까? – patrickfdsouza

5

나는 당신이 가고자하는 곳을 볼 수있다. 그러나 나는 당신이 약간의 접근 방식을 재고 할 필요가 있다고 생각한다. 사용자는 항상 원하는대로 설치 및 제거 할 수 있어야합니다. 하지만 앱을 처음 설치 한 시점을 확인하기 위해 앱에 수표를 넣을 수 있습니다.

PackageInfo info = pm.getPackageInfo(packageName, 0); 
long firstInstallTime = info.firstInstallTime; 

이이 타임 스탬프는 다음 설치 제거하고 다시 설치 수의 번호로 변경되지 않습니다 응용 프로그램이 처음 firstInstallTime 에 설치 된 시간을 저장합니다.

PackageInfo 클래스는 기기에서 앱에 대한 유용한 정보를 제공하며 알만한 가치가 있습니다.

애플 리케이션 소스 디렉토리는 당신이 얻을 수 있습니다 (응용 프로그램은 가장 최근에 설치 한 즉) 마지막으로 수정 된 때 타임 스탬프이 비교할 수

:

ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(packageName, 0); 
long mostRecentInstallTime = new File(appInfo.sourceDir).lastModified(); 

나는 또한 사용했습니다 이 접근 방식은 사용자에게 1 주일간 전체 기능의 앱 평가판을 제공하여보다 적은 "무료 모드"로 되돌리기 때문에 설치 제거 및 재설치를 통해 문제를 해결할 수 없습니다.


추가

: 귀하의 코멘트에 대한 응답으로
...
당신은 당신의 자신의 응용 프로그램 또는 당신이 후 설치된 앱에 대한 PackageInfo를 얻는 데 제한되지 않습니다. "장치 수명"에 설치된시기와 관계없이 현재 장치에있는 모든 응용 프로그램에 대해 PackageInfo를 가져올 수 있습니다. 코드의
이 약간 수정 된 버전은 here 장치에있는 모든 응용 프로그램에 대해 당신에게 firstInstallTime을 줄 것이다 발견

// Get PackageInfo for each app on the device 
List<PackageInfo> packageInfoInstalledPackages = getPackageManager().getInstalledPackages(0); 

// Now iterate through to get the info you need. 
long[] firstInstallTimes = long[packageInfoInstalledPackages.size()]; 
for(int i=0;i<packageInfoInstalledPackages.size();i++) { 
    PackageInfo p = packageInfoInstalledPackages.get(i); 
    if (p.versionName != null) { 
     firstInstallTimes[i] = p.firstInstallTime; 
    }   
} 

당신은 또한 그래서 당신은 당신이 필요로하는 모든이 있어야 ApplicationInfo를 얻을 수 있습니다.

+0

내 응용 프로그램을 설치 한 후에 만 ​​수행 할 수 있으며 내 응용 프로그램을 설치 한 후에 설치/제거 된 응용 프로그램 만 추적 할 수 있다고 생각합니다. 이제 장치의 수명 기간 동안 모든 설치를 추적하려고합니다. 그래서 기본적으로 내 앱이 언제 설치되었는지에 관계없이 설치/제거 된 모든 앱에 관심이 있습니다. – patrickfdsouza

+0

내 답변에 "추가"를 참조하십시오. –

+0

다시 한번, 제거한 앱에도 관심이 있습니다. 이 데이터도 얻을 수 있습니까? – patrickfdsouza

관련 문제