![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Auto-actualizar apk
Hola buenas tardes,
Estoy desarrollando una pequeña APK y me gustaría actualizar desde ella misma, para ello he conseguido descargar el APK, pero no consigo ejecutarlo. He encontrado probado este código: Código:
procedure TMainForm.EjecutaAPK(sRuta : String);
var
Intent: JIntent;
F: Jfile;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
Intent.setDataAndType(TAndroidHelper.JFileToJURI(TJFile.JavaClass.init(StringToJString(sRuta))), StringToJString('application/vnd.android.package-archive'));
TAndroidHelper.Activity.startActivity(Intent);
end;
El caso es que no consigo que funcione, alguna forma mas sencilla de ejecutar un APK?. Un saludo y gracias. |
|
#2
|
||||
|
||||
|
No es tan simple, además tendrás que dar permiso REQUEST_INSTALL_PACKAGES, que recuerde, y MANAGE_UNKNOWN_APP_SOURCES.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
|||
|
|||
|
Si, lo de dar permisos de aplicaciones desconocidas los esperaba, pero de momento no he conseguido mucho. Seguiré investigando....
|
|
#4
|
||||
|
||||
|
No es Delphi, pero a ver si esto te sirve de referencia:
Código:
Private Sub SendInstallIntent
Dim ApkName As String = kcTmpApk ''' "tmp.apk"
Dim i As Intent
If phone.SdkVersion >= 24 Then 'Nougat 7.0
i.Initialize("android.intent.action.INSTALL_PACKAGE", GetFileUri(ApkName))
i.Flags = Bit.Or(i.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION
Else
i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(SharedFolder, ApkName))
i.SetType("application/vnd.android.package-archive")
End If
StartActivity(i)
End Sub
Private Sub GetFileUri (FileName As String) As Object
If UseFileProvider = False Then
Dim uri As JavaObject
Return uri.InitializeStatic("android.net.Uri").RunMethod("parse", Array("file://" & File.Combine(SharedFolder, FileName)))
Else
Dim f As JavaObject
f.InitializeNewInstance("java.io.File", Array(SharedFolder, FileName))
Dim fp As JavaObject
Dim context As JavaObject
context.InitializeContext
fp.InitializeStatic("android.support.v4.content.FileProvider")
Return fp.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f))
End If
End Sub
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#5
|
|||
|
|||
|
Gracias, voy a estudiarlo!
|
|
#6
|
|||
|
|||
|
Seguimos intentándolo sin mucho éxito...
He intentando varios códigos, pero no consigo dar con la tecla, lo último que he probado es este código: Código:
procedure TMainForm.OpenAPK(AFileName: string);
var
LIntent: JIntent;
LAuthority: JString;
LUri: Jnet_Uri;
begin
LAuthority := StringToJString(JStringToString(TAndroidHelper.Context.getApplicationContext.getPackageName)+'.fileprovider');
LUri := TJFileProvider.JavaClass.getUriForFile(TAndroidHelper.Context, LAuthority, TJFile.JavaClass.init(StringToJString(AFileName)));
LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW);
LIntent.setDataAndType(LUri, StringToJString('application/vnd.android.package-archive'));
LIntent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
TAndroidHelper.Activity.startActivity(LIntent);
end;
Ahora el error que obtengo es: "Java type JFileProvider could not be found", y no se por donde seguir ![]() |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Auto.incrementar | yevabas | Conexión con bases de datos | 4 | 13-02-2012 17:44:04 |
| Buen auto BMW | Alexandro | Humor | 0 | 14-04-2009 17:27:37 |
| EAN 128 Auto Switch ?? | ofillia | Varios | 2 | 02-02-2007 19:07:03 |
| auto incremento | valentino | MySQL | 1 | 14-02-2005 12:59:33 |
| Auto borrado | brandolin | Varios | 6 | 27-09-2003 21:18:37 |
|