2016-05-30 61 views
0

我创建了一个应用程序,用于侦听手机上最后安装的应用程序,并在安装新应用程序时通知我。现在它正确地通知我上次安装的应用程序,但它也会在更新任何应用程序时通知我。 有谁知道如何只听最后安装的应用程序,而不是听应用程序何时通过更新?广播接收器聆听上次安装的应用程序

这里是我的代码:

public class NewInstallReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 


    Log.d("tag_name", "NewInstallReceiver" + intent.getAction()); 

    final PackageManager pm = context.getPackageManager(); 
    ApplicationInfo ai; 
    try { 

     ai = pm.getApplicationInfo(intent.getData().getSchemeSpecificPart(), 0); 
     Log.d("tag_name", "Application Info" + ai); 

    } catch (final PackageManager.NameNotFoundException e) { 
     ai = null; 
    } 

    List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_META_DATA); 

    Collections.sort(packages, new Comparator<PackageInfo>() { 
     @Override 
     public int compare(PackageInfo p1, PackageInfo p2) { 
      return Long.toString(p2.firstInstallTime).compareTo(Long.toString(p1.firstInstallTime)); 
     } 
    }); 
} 
} 

我的意图过滤器广播接收器

<receiver android:name="com.example.natalie.listener.NewInstallReceiver"> 
     <intent-filter android:priority="100"> 
      <action 
       android:name="android.intent.action.PACKAGE_INSTALL"/> 
      <action 
       android:name="android.intent.action.PACKAGE_ADDED"/> 
      <action 
       android:name="android.intent.action.PACKAGE_DATA_CLEARED"/> 
      <action 
       android:name="android.intent.action.PACKAGE_REMOVED"/> 
      <data android:scheme="package"/> 
     </intent-filter> 
    </receiver> 
+0

你在听什么动作? – jaibatrik

+0

@jaibatrik目前,当我收到包信息“ai”时,它正在获取(1)新安装的应用程序的包信息和(2)刚更新的任何应用程序。我只想获取上次安装的应用程序的软件包信息,而不是更新的应用程序。 – Natalie

+0

“NewInstallReceiver”的意图过滤器是什么? – jaibatrik

回答

0

有了这个代码,你可以看到一个应用程序被安装在手机上之前:

PackageManager pm = context.getPackageManager(); 
ApplicationInfo appInfo = pm.getApplicationInfo("application package name", 0); 
String appFile = appInfo.sourceDir; 
long installed = new File(appFile).lastModified();