在我的应用程序中,我想检测是否安装了像VLC这样的应用程序 如果是这样,当用户点击按钮时,我的应用程序将继续播放视频,但如果没有,该应用程序将引导用户到App Store下载应用程序。
有没有办法检测是否安装了特定的应用程序?
答案 0 :(得分:1)
试试这个:
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(***REPLACE_WITH_YOUR_INTENT***,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
来自Android Docs:
虽然Android平台保证某些意图会 解析其中一个内置应用程序(如电话,电子邮件或 日历应用),您应该始终包含验证步骤 调用意图。
验证是否有可以响应的活动 intent,调用queryIntentActivities()来获取活动列表 能够处理你的意图。如果返回的List不为空, 你可以安全地使用意图。
注意:您应该在活动首次开始时执行此检查 你需要在之前禁用使用意图的功能 用户尝试使用它。如果您知道可以处理的特定应用程序 意图,你也可以提供一个供用户下载的链接 应用(请参阅如何在Google Play上链接到您的产品)。
所以,你可以这样使用:
Intent vlcIntent = new Intent(Intent.ACTION_VIEW);
vlcIntent.setPackage("org.videolan.vlc");
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(vlcIntent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
if (isIntentSafe){
startActivity(vlcIntent);
} else {
Intent marketIntent = new Intent(Intent.ACTION_VIEW);
marketIntent.setData(Uri.parse("market://details?id=org.videolan.vlc"));
startActivity(marketIntent);
}
另外,另一个可能有用的链接(VideoLan Wiki):
Android Video Player Intents
它说:
对于简单的媒体播放:
int vlcRequestCode = 42; Uri uri = Uri.parse("file:///storage/emulated/0/Movies/KUNG FURY Official Movie.mp4"); Intent vlcIntent = new Intent(Intent.ACTION_VIEW); vlcIntent.setPackage("org.videolan.vlc"); vlcIntent.setDataAndTypeAndNormalize(uri, "video/*"); vlcIntent.putExtra("title", "Kung Fury"); vlcIntent.putExtra("from_start", false); vlcIntent.putExtra("position", 90000l); vlcIntent.putExtra("subtitles_location", "/sdcard/Movies/Fifty-Fifty.srt"); startActivityForResult(vlcIntent, vlcRequestCode);
如果您特别想要启动VideoPlayerActivity,可以设置
vlcIntent.setComponent(new ComponentName("org.videolan.vlc", "org.videolan.vlc.gui.video.VideoPlayerActivity"));
您还可以将代码放入布尔代码块并传入您的意图,这样您就可以重用代码。像这样:
private boolean checkIntent(Intent intent) {
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
return isIntentSafe;
}
答案 1 :(得分:0)
您需要检查VLC的软件包是否已安装。如果未安装,则打开显示vlc安装页面的Play商店。
这是来源:
String appPackageName = "org.videolan.vlc";
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
以下来源将检查是否有任何可播放视频的内容,如果没有,则会提示用户安装VLC。这是一个可以帮助其他用户的更完整的示例。它检查本地安装的任何内容是否可以播放该文件,如果没有,则检查vlc,如果未安装VLC,则会将用户带到Play商店。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
intent.setDataAndType(Uri.fromFile(file), mimetype);
PackageManager manager = context.getPackageManager();
List<ResolveInfo> resolveInfoList = manager.queryIntentActivities(intent, 0);
if (resolveInfoList.size() > 0) {
context.startActivity(intent);
} else {
FragmentManager fragmentManager = ((AppCompatActivity) context).getSupportFragmentManager();
ClassChatRecyclerAdapter.InstallVlcDialogFragment.newInstance(extension).show(fragmentManager, "INSTALL_VLC");
}
这是检查VLC的对话框,如果找不到,则会将用户带到Play商店进行安装。您可以使用下面的源代码的try / catch部分来专门解决您的问题。
public static class InstallVlcDialogFragment extends DialogFragment {
public static ClassChatRecyclerAdapter.InstallVlcDialogFragment newInstance(String mediaType) {
ClassChatRecyclerAdapter.InstallVlcDialogFragment frag = new ClassChatRecyclerAdapter.InstallVlcDialogFragment();
Bundle args = new Bundle();
args.putString("mediaType", mediaType);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String mediaType = getArguments().getString("mediaType");
return new AlertDialog.Builder(getActivity(), R.style.AppDialogTheme)
.setTitle("Unable to find video player for " +mediaType + " files.")
.setMessage("Install VLC Player to play file?")
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String appPackageName = "org.videolan.vlc";
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
dismiss();
}
}
)
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dismiss();
}
}
)
.create();
}
}