Android获取某个app首次安装时间和更新时间

在Android中,可以使用PackageManager类来获取应用程序的安装时间和上次更新时间。以下是如何实现的一般步骤:

以微信为例:

  1. 获取一个PackageManager的实例。
  2. 使用PackageManagergetPackageInfo方法,传入微信的包名(通常是com.tencent.mm)来获取PackageInfo对象。
  3. PackageInfo对象中读取firstInstallTime属性和lastUpdateTime属性。

下面是一个简单的示例代码片段,展示了如何获取微信app的安装时间和更新时间:

try {
    PackageManager packageManager = getPackageManager();
    PackageInfo packageInfo = packageManager.getPackageInfo("com.tencent.mm", 0);

    // 安装时间(第一次安装时间)
    long firstInstallTime = packageInfo.firstInstallTime;
    Date installDate = new Date(firstInstallTime);
    
    // 更新时间(最后一次更新时间)
    long lastUpdateTime = packageInfo.lastUpdateTime;
    Date updateDate = new Date(lastUpdateTime);
    
    // 将毫秒数转换为实际日期格式或其他你需要的格式
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String installDateString = dateFormat.format(installDate);
    String updateDateString = dateFormat.format(updateDate);
    
    // 打印或在界面上显示安装时间和更新时间
    Log.d("WeChat Install Time", installDateString);
    Log.d("WeChat Update Time", updateDateString);
    
} catch (PackageManager.NameNotFoundException e) {
    // 微信没有安装在设备上 或者 发生了其他错误
    e.printStackTrace();
}

此代码假定您已经拥有必要的上下文 (Context) 权限,并且它运行在具有正确权限的环境中。如果微信应用未安装,getPackageInfo将抛出NameNotFoundException异常。

对于普通应用来说,你不需要任何特殊权限就可以访问这些信息。但是,请确保在尝试调用getPackageManager()时,你的代码是在拥有有效上下文的环境中执行,例如在ActivityService中。

值得注意的是

重新刷机或格式化手机后,com.android.vending(Google Play Store)的首次安装时间通常会发生变化。当您重新刷机或恢复出厂设置时,设备上的所有数据和应用程序都会被清除,并且系统将重置为新状态。

在这种情况下,一旦设备重新启动并且系统应用(包括 Google Play Store)被重新安装或恢复到其默认版本,PackageManager中记录的关于com.android.vendingfirstInstallTime值就会更新为这次安装的时间戳。

重要的是要了解Android设备上的“首次安装时间”实际上是指应用在当前用户设备上的首次安装时间,而不是应用本身发布的时间。因此,任何操作导致应用重新安装,无论是手动还是作为系统更新和恢复过程的一部分,都可能改变这个时间戳。所以,刷机或者重置手机来做坏事的用户,要被暴露了。。。Android获取UID的新思路

Google常见包名和启动页

应用名包名启动页
Facebookcom.facebook.katanacom.facebook.katana.LoginActivity
Chromecom.android.chromecom.google.android.apps.chrome.Main
Gmailcom.google.android.gmcom.google.android.gm.ConversationListActivityGmail
Google+com.google.android.apps.pluscom.google.android.apps.plus.phone.HomeActivity
Mapscom.google.android.apps.mapscom.google.android.maps.MapsActivity
Play Moviescom.google.android.videoscom.google.android.youtube.videos.EntryPoint
Play Bookscom.google.android.apps.bookscom.google.android.apps.books.app.BooksActivity
Play Gamescom.google.android.play.gamescom.google.android.gms.games.ui.destination.main.MainActivity
Drivecom.google.android.apps.docscom.google.android.apps.docs.app.NewMainProxyActivity
YouTubecom.google.android.youtubecom.google.android.apps.youtube.app.WatchWhileActivity
Photoscom.google.android.apps.pluscom.google.android.apps.plus.phone.ConversationListActivity
Hangoutscom.google.android.talkcom.google.android.talk.SigningInActivity
Play Storecom.android.vendingcom.android.vending.AssetBrowserActivity
Opera Minicom.opera.mini.androidcom.opera.mini.android.Browser
Deezerdeezer.android.appcom.deezer.android.ui.activity.LauncherActivity
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实时获取更新的系统时间,可以使用 `Handler` 和 `Runnable`,在 `Runnable` 中获取当前时间更新 UI,然后使用 `Handler` 定时调用这个 `Runnable`。 以下是一个每秒钟更新一次系统时间的示例代码: ```java import android.os.Bundle; import android.os.Handler; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity { private Handler mHandler = new Handler(); private TextView mTextView; private Runnable mUpdateTimeTask = new Runnable() { public void run() { // 获取当前时间 Date date = new Date(); // 设置时间格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 格式化时间为字符串 String currentTime = sdf.format(date); // 将时间显示到 TextView 上 mTextView.setText(currentTime); // 每秒钟更新一次 mHandler.postDelayed(this, 1000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = findViewById(R.id.textView); // 开始更新时间 mHandler.post(mUpdateTimeTask); } @Override protected void onDestroy() { super.onDestroy(); // 停止更新时间 mHandler.removeCallbacks(mUpdateTimeTask); } } ``` 在上述代码中,我们首先定义了一个 `mUpdateTimeTask` 的 `Runnable`,它会在每次运行时获取当前时间更新 UI,并使用 `Handler` 定时调用自己,以实现每秒钟更新一次的效果。然后在 `onCreate` 方法中启动这个 `Runnable`,在 `onDestroy` 方法中停止它。最后,将显示时间的 `TextView` 赋值给 `mTextView` 变量,以便在 `Runnable` 中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值