从应用程序内快速安装从市场安装APK

时间:2015-03-13 14:27:48

标签: android google-play

我有一个问题,我看到堆栈溢出的几个答案,但无济于事。我想要做的是:

我正在创建一个应用程序来检查是否先安装了应用程序。例如,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);

我能通过市场链接做到这一点吗?

感谢您的帮助!

2 个答案:

答案 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);