Guest User

Untitled

a guest
Jul 22nd, 2020
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.28 KB | None | 0 0
  1.  
  2.     private val ACTION_INSTALL_COMPLETE = "com.example.myapplication.INSTALL_COMPLETE"
  3.  
  4.     @Throws(IOException::class)
  5.     fun installPackage(context: Context, inputStream: InputStream) {
  6.         val packageInstaller = context.packageManager.packageInstaller
  7.         packageInstaller.registerSessionCallback(object : PackageInstaller.SessionCallback() {
  8.             override fun onProgressChanged(sessionId: Int, progress: Float) {
  9.                 Log.d("installPackage", "onProgressChanged, progress: $progress")
  10.             }
  11.  
  12.             override fun onActiveChanged(sessionId: Int, active: Boolean) {
  13.                 Log.d("installPackage", "onActiveChanged, active: $active")
  14.             }
  15.  
  16.             override fun onFinished(sessionId: Int, success: Boolean) {
  17.                 Log.d("installPackage", "onFinished")
  18.             }
  19.  
  20.             override fun onBadgingChanged(sessionId: Int) {
  21.                 Log.d("installPackage", "onBadgingChanged")
  22.             }
  23.  
  24.             override fun onCreated(sessionId: Int) {
  25.                 Log.d("installPackage", "onCreated")
  26.             }
  27.  
  28.         })
  29.         val sessionId = packageInstaller.createSession(SessionParams(SessionParams.MODE_FULL_INSTALL))
  30.         val session = packageInstaller.openSession(sessionId)
  31.         val sizeBytes: Long = 0
  32.         var out: OutputStream? = null
  33.         out = session.openWrite("my_app_session", 0, sizeBytes)
  34.         var total = 0
  35.         val buffer = ByteArray(65536)
  36.         var c: Int
  37.         while (inputStream.read(buffer).also { c = it } != -1) {
  38.             total += c
  39.             out.write(buffer, 0, c)
  40.         }
  41.         session.fsync(out)
  42.         inputStream.close()
  43.         out.close()
  44.  
  45.         session.commit(createIntentSender(this, sessionId))
  46.         session.close()
  47.     }
  48.  
  49.     private fun createIntentSender(context: Context, sessionId: Int): IntentSender {
  50.         val pendingIntent = PendingIntent.getBroadcast(
  51.                 context,
  52.                 sessionId,
  53.                 Intent(ACTION_INSTALL_COMPLETE),
  54.                 0)
  55.         return pendingIntent.intentSender
  56.     }
  57.  
  58. class Receiver : BroadcastReceiver() {
  59.         override fun onReceive(context: Context?, intent: Intent?) {
  60.             Log.d("onReceive", "$intent, context: $context")
  61.         }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment