2015-03-12 2 views
0

Это пример кода, который установки файла с АПК внешнего хранения с деятельностью подтверждения:Установить APK из внешнего запоминающего устройства из другого приложения без подтверждения активности

 Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/app-debug.apk")), "application/vnd.android.package-archive"); 
     startActivity(intent); 

мне нужно установить APK из внешнего запоминающего устройства без подтверждения активности. Возможно ли это?

+0

Если устройство «внедренное», возможно, тогда я дам вам код. Если нет, то это невозможно. – Wildcopper

+0

без корня невозможно. Вот почему Amazon и Mikandi «магазины приложений» запрашивают подтверждение пользователя. – Budius

+0

Это конкретное устройство. Я настраиваю android для этого устройства. – Pein

ответ

0

Я решил проблему. Чтобы установить apk из любого хранилища, мы можем использовать PackageManager и скрытый api. Это пример кода:

PackageManager manager = getPackageManager(); 
    Uri packageURI = Uri.fromFile(new File(pathToApkFile)); 
    manager.installPackage(packageURI, null, 2, "app"); 

installPackage скрыт апи, и вам необходимо создать приложение в AOSP

0

На корневом устройстве вы можете использовать этот код, который также возвращается к запросам подтверждения на некорневом устройстве. Это автоматически обновляет фактически запущенное приложение и перезапускает его.

// path is the complete path to the APK file, startActivityName is the name of the activity to start once the install is complete. 
private boolean rootUpdateAPK(String path, String startActivityName) 
{  
    final String libs = "LD_LIBRARY_PATH=/vendor/lib:/system/lib "; 
    final String[] commands = { 
      libs + "pm install -r " + path, 
      //    libs + "reboot" 
      //  }; 
      libs + "am start -n " + this.getPackageName() + "/."+startActivityName 
    }; 
    execute_as_root(commands); // not supposed to return if successful 

    // device is not rooted, let's do it the "regular" way. 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 

    return false; 
} 

private void execute_as_root(String[] commands) { 
    try { 
     Process p = Runtime.getRuntime().exec("su"); 
     InputStream es = p.getErrorStream(); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 

     for(String command : commands) { 
      TVLog.i(TAG,"Execute as root: "+command); 
      os.writeBytes(command + "\n"); 
     } 
     os.writeBytes("exit\n"); 
     os.flush(); 
     os.close(); 

     int read; 
     byte[] buffer = new byte[4096]; 
     String output = new String(); 
     while ((read = es.read(buffer)) > 0) { 
      output += new String(buffer, 0, read); 
     } 

     p.waitFor(); 
     TVLog.i(TAG, output.trim() + " (" + p.exitValue() + ")"); 
    } catch (IOException e) { 
     TVLog.i(TAG, e.getMessage()); 
    } catch (InterruptedException e) { 
     TVLog.i(TAG, e.getMessage()); 
    } 
} 
+0

Это не работает для меня. Мне нужно установить приложение из apk без подтверждения и root. – Pein

+0

Вы не можете, или вы должны сделать свое приложение системным приложением и сделать его частью прошивки, так как вы не хотите или можете root. – Wildcopper

+0

мое приложение - системное приложение – Pein

Смежные вопросы