最近在做一个视频跳转播放功能,也就是在第三方应用中播放本应用内的视频,这需要获取第三方应用的版本号,以便做兼容,其实获取第三方应用的版本号很简单:
// 获取所有已安装的应用包名、版本号、版本名称
private int getVersionCode(){
PackageManager packageManager = this.getPackageManager();
try {
PackageInfo packageInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
String packageName = packageInfo.packageName;
String versionName = packageInfo.versionName;
int versionCode = packageInfo.versionCode;
Log.d("chg",""+"packageName-->"+packageName+"--versionName-->"+versionName+"--versionCode-->"+versionCode);
return versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return 0;
}
// 获取已经安装的应用的包名、版本号、版本名称。
private int getAllVersionCode(){
PackageManager packageManager=getPackageManager();
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
for(PackageInfo info:packageInfos){
String versionName1 = info.versionName;
int versionCode1 = info.versionCode;
String packageName1 = info.packageName;
Log.d("chg","--versionName-->"+versionName1);
Log.d("chg","--versionCode-->"+versionCode1);
Log.d("chg","--packageName1-->"+packageName1);
if (info.packageName.equals("com.eebbk.syncenglish")){
String versionName = info.versionName;
int versionCode = info.versionCode;
Log.d("chg","--versionName-->"+versionName);
Log.d("chg","--versionCode-->"+versionCode);
return versionCode;
}
}
return 0;
}
其中"com.eebbk.syncenglish"就是你要获取的已安装的应用包名,有了这个指定包名,才可以获取指定应用的版本号。
获取到版本号就可以做判断实现跳转了:
if (getAllVersionCode() >= 31 ) {
Intent intent = new Intent();
Bundle bundle = new Bundle();
ComponentName componentName = new ComponentName("com.eebbk.vtraining", "com.eebbk.vtraining.play.outsideplay.OutSideVideoPlayerActivity");
intent.setComponent(componentName);
intent.setAction("com.eebbk.vtraining.outsideplay");
intent.addCategory("android.intent.category.DEFAULT");
bundle.putString("intent_course_package_url", mVideoDownInfos.get(mCurPlayVideoIndex).videoLink);
bundle.putString("intent_video_name", mVideoDownInfos.get(mCurPlayVideoIndex).downFileInfo.fileNameStr);
bundle.putString("intent_app_name","同步英语");
intent.putExtras(bundle);
startActivity(intent);
}
其中红色标记的是跳转的应用包名,蓝色标记的是具体跳转的界面位置,注意那个Action别写错了,要对应,在跳转的那个应用的清单文件中别忘了做配置。
好了,之后视频播放就是另外一个应用的事了,人家从我这获取都数据后即可播放。
一、应用程序得到自己的版本信息
/**
* 得到当前应用版本名称的方法
*
* @param context
* :上下文
* @throws Exception
*/
public static String getVersionName(Context context) throws Exception {
// 获取packagemanager的实例
PackageManager packageManager = context.getPackageManager();
// getPackageName()是你当前类的包名
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
String version = packInfo.versionName;
return version;
}
二、应用程序获得其他应用程序的版本信息(根据包名)
/**
* 获取指定包名的版本号
*
* @param context
* 本应用程序上下文
* @param packageName
* 你想知道版本信息的应用程序的包名
* @return
* @throws Exception
*/
public static String getVersionName(Context context, String packageName) throws Exception {
// 获取packagemanager的实例
PackageManager packageManager = context.getPackageManager();
PackageInfo packInfo = packageManager.getPackageInfo(packageName, 0);
String version = packInfo.versionName;
return version;
}
三、从SD卡等路劲获取某安装包(apk文件)的版本信息
/**
* 从一个apk文件去获取该文件的版本信息
*
* @param context
* 本应用程序上下文
* @param archiveFilePath
* APK文件的路径。如:/sdcard/download/XX.apk
* @return
*/
public static String getVersionNameFromApk(Context context, String archiveFilePath) {
PackageManager pm = context.getPackageManager();
PackageInfo packInfo = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);
String version = packInfo.versionName;
return version;
}