how to install Apk with OBB in android 11 programatically

125 Views Asked by At

I am trying to install apk with the following method and it is working fine with regular APKs, but there are some APKs which has OBB file also. I am not sure how to install APKs with OBB.

    @Throws(IOException::class)
    fun installPackage(url: String): Boolean {
        val apkName: String = url.substring(url.lastIndexOf("/") + 1)
        val fileInputStream = FileInputStream(File(APK_DOWNLOAD_PATH + apkName))
        val packageInstaller = mContext.packageManager.packageInstaller
        val params = PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL
        )
        val sessionId = packageInstaller.createSession(params)
        val session = packageInstaller.openSession(sessionId)
        val out = session.openWrite(mContext.resources.getString(R.string.app_name), 0, -1)
        val buffer = ByteArray(65536)
        var c: Int
        while (fileInputStream.read(buffer).also { c = it } != -1) {
            out.write(buffer, 0, c)
        }
        session.fsync(out)
        fileInputStream.close()
        out.close()
        session.commit(createIntentSender(mContext, sessionId, apkName)!!)
        return true
    }

I tried to download the OBB file to Android/Obb/ directory using following code:

 var obbPath = Environment.getExternalStorageDirectory().absolutePath + "/Android/Obb/";
        request_for_url.setDestinationInExternalPublicDir(
            obbPath, "$obbName"
        )
  var queueId = downloadManager!!.enqueue(request_for_url)

but it is throwing the following error:

java.lang.IllegalStateException: Not one of standard directories: /storage/emulated/0/Android/Obb/

Thanks in Advance.

0

There are 0 best solutions below