que play pais oficial instalar google estan disponibles descargar como appflix app aplicaciones android android-intent

android - pais - google play store



Manejar los intentos de descarga en mi aplicaciĆ³n (2)

Necesita poner debajo del código en su actividad que responde a la intención,

void onCreate(Bundle savedInstanceState) { // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_VIEW.equals(action)) { */if (type.startsWith("image/“)) {*/ downloadImage(intent); // Download image being sent } } void downloadImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Write Your Download Code Here } }

Mi aplicación de vista web ya maneja bien la URL externa (abre enlaces desde aplicaciones externas como viber, navegadores, etc.) como esta- ( obtuve este código aquí )

// get URL from browsable intent filter TextView uri = (TextView) findViewById(R.id.urlField); // get the url url = getIntent().getDataString(); Uri data = getIntent().getData(); if (data == null) { uri.setText(""); } else { uri.setText(getIntent().getData().toString()); fadeout(); } // }

en mi configuración de vista web

// Load URL from Browsable intent filter if there is a valid URL pasted if (uri.length() > 0) webView.loadUrl(url); else // dont load

así es como manejo las descargas dentro de mi webview

// download manager webView.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { DownloadManager.Request request = new DownloadManager.Request( Uri.parse(url)); request.setMimeType(mimeType); String cookies = CookieManager.getInstance().getCookie(url); request.addRequestHeader("cookie", cookies); request.addRequestHeader("User-Agent", userAgent); request.setDescription("Downloading file..."); request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType)); request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setDestinationInExternalPublicDir( Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName( url, contentDisposition, mimeType)); DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); dm.enqueue(request); Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show(); } }); // download manager

Sin embargo, me gustaría manejar los intentos de descarga aprobados por otras aplicaciones también. ¿Cómo puedo hacer eso?

Esto es lo que uso para abrir el selector de aplicaciones predeterminado del sistema desde otra aplicación (mi aplicación aparece en la lista aquí) -

// download via... webView.setDownloadListener(new DownloadListener() { public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); Toast.makeText(getApplicationContext(), "don''t choose our app as it can''t handle download intents, i have posted a question on stackoverflow though.", Toast.LENGTH_SHORT).show(); } }); // download via..

Cada vez que hago clic en un enlace de descarga, mi aplicación se abre, pero se queda quieta en lugar de abrir la url. Quiero que actúe como una aplicación de descarga


tienes que resolver problemas para

  • (a) siempre muestra el selector
  • (b) dile a Android que tu aplicación debe ser parte del selector
  • (c) procesar la "descarga"

(a) siempre muestra el selector

reemplazar

startActivity(i);

con

startActivity(Intent.createChooser(i, "caption of the choser"));

(b) dile a Android que tu aplicación debe ser parte del selector

En el manifiesto, debes declarar que tienes una actividad que puede manejar el contenido relevante

<manifest ... > <application ... > <activity android:name=".MyDownloadActivity" ...> <intent-filter > <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="*/*" android:scheme="file" /> </intent-filter> <intent-filter > <!-- mime only SEND(_TO) --> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SENDTO" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.CATEGORY_OPENABLE" /> <!-- these do not work :-( <data android:scheme="content" android:host="*" /> <data android:scheme="content" android:host="media" android:pathPattern="/external/images/media/.*" /> <data android:host="*" android:scheme="content" android:mimeType="image/*" /> --> <data android:mimeType="*/*" /> </intent-filter> </activity> </application> </manifest>

* (c) procesar la "descarga"

MyDownloadActivity Your MyDownloadActivity.onCreate() recibirá todos los mime-types * / * para SEND, SENDTO, VIEW. Para más detalles, vea la respuesta de @Vickyexpert-s

Intent-Intercept es una herramienta gratuita de Android para analizar intenciones. puede interceptar casi todos los intentos. puede ver el código fuente para ver cómo se hace esto.

Yo uso sendtosd como mi controlador de descarga de propósito general. It-s sourcecoder está disponible en github