2016-05-30 65 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();