我有一个问题,我看到堆栈溢出的几个答案,但无济于事。我想要做的是:
我正在创建一个应用程序来检查是否先安装了应用程序。例如,com.appA.android。
如果未安装appA,则会在继续之前提示用户进行安装以安装应用。我没有尝试在没有用户许可的情况下安装APK,但获得了他们的许可。 appA在商店,但我不希望我的用户被拉离应用程序。目前,我这样做的方式如下:
Intent promptInstall = new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse("file:///path/to/apk"),
"application/vnd.android.package-archive");
startActivity(promptInstall);
我能通过市场链接做到这一点吗?
感谢您的帮助!
答案 0 :(得分:1)
出于安全原因,您无法在没有安装对话框的情况下或在后台安装APK。您可以使用root和Packagemanager在后台安装APK。
有几次尝试监听应用程序的安装,因此您可以重新启动活动。一个是注册BroadcastReceiver,它监听应用程序的安装。
<receiver android:name=".PackageReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="package" />
</intent-filter>
然后在安装新包时调用此类:
public class PackageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// handle install event here
}
}
第二次尝试是有一个Timer试图找到应用程序所有nSeconds进行安装。来自另一个问题的样本:
public class Example extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Put the package name here...
boolean installed = appInstalledOrNot("com.Ch.Example.pack");
if(installed) {
//This intent will help you to launch if the package is already installed
Intent LaunchIntent = getPackageManager()
.getLaunchIntentForPackage("com.Ch.Example.pack");
startActivity(LaunchIntent);
System.out.println("App already installed on your phone");
}
else {
System.out.println("App is not installed on your phone");
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
}
最后但并非最不重要:如果你有APK和root,你可以使用shell命令安装它:
pm install APKFile.apk
答案 1 :(得分:0)
尝试这样的操作,这将打开特定应用的Google Play详细信息页面。 (假设这是你想要做的)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);