¿Es posible que una aplicación de Android extraiga información de otras aplicaciones instaladas en el teléfono?

Es posible, pero solo si la aplicación, de la que está tomando los datos, lo permite.

Tomemos, por ejemplo, Facebook. Facebook permite que otras aplicaciones vean el perfil del usuario y otra información del usuario. Siempre que la aplicación cumpla los siguientes criterios:

1. La aplicación debe tener token de acceso de Facebook y debe estar registrada en la consola de desarrollador de Facebook.

2. Y el usuario debe permitir que la aplicación vea la información.

Esto fue solo un ejemplo para Facebook, otras aplicaciones tienen otros criterios. Debe buscar los criterios asociados con la aplicación en cuestión.

Información adicional: – La información del teléfono, como los contactos, se puede leer fácilmente, solo solicitando el permiso del usuario.

———-

He creado una aplicación de noticias de Android. Es fácil de usar, tiene menos contenido, es ligero y se aligera rápidamente. Por favor, eche un vistazo: Highlites – Aplicaciones de Android en Google Play

1. Crear un diseño de aplicación en xml

activity_main.xml

Como puede ver en la captura de pantalla adjunta, crearemos un ListView para mostrar todas las aplicaciones instaladas en Android.

http://schemas.android.com/apk/res/android&quot ; android: layout_width =” fill_parent “android: layout_height =” fill_parent “android: orientación =” vertical “>

snippet_list_row.xml

El adaptador ListView está utilizando este diseño para representar los detalles de la aplicación. Muestra el icono de la aplicación, el nombre de la aplicación y el paquete de la aplicación.

http://schemas.android.com/apk/res/android&quot ; android: layout_width =” fill_parent “android: layout_height = “wrap_content”>

2. Escribir clase de Java

AllAppsActivity.java

Esta es la clase de aplicación principal que se utiliza para inicializar y enumerar las aplicaciones instaladas. Como obtener la lista de detalles de la aplicación de PackageManage es una tarea de larga duración, lo haremos en AsyncTask. Además, esta clase está utilizando el Adaptador personalizado “ApplicationAdapter” para ListView personalizado.

paquete com.javatechig.listapps; import java.util.ArrayList; import java.util.List; importar android.app.AlertDialog; importar android.app.ListActivity; importar android.app.ProgressDialog; importar android.content.ActivityNotFoundException; importar android.content.DialogInterface; importar android.content.Intent; importar android.content.pm.ApplicationInfo; importar android.content.pm.PackageManager; importar android.net.Uri; importar android.os.AsyncTask; importar android.os.Bundle; importar android.view.Menu; importar android.view.MenuInflater; importar android.view.MenuItem; importar android.view.View; importar android.widget.ListView; importar android.widget.Toast; clase pública AllAppsActivity extiende ListActivity {private PackageManager packageManager = null; Lista privada applist = null; Adaptador de aplicación privado listadaptor = nulo; @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); packageManager = getPackageManager (); nuevas LoadApplications (). execute (); } public boolean onCreateOptionsMenu (Menú de menú) {MenuInflater inflater = getMenuInflater (); inflater.inflate (R.menu.menu, menú); volver verdadero; } public boolean onOptionsItemSelected (elemento MenuItem) {resultado booleano = verdadero; switch (item.getItemId ()) {case R.id.menu_about: {displayAboutDialog (); descanso; } predeterminado: {result = super.onOptionsItemSelected (item); descanso; }} devolver resultado; } private void displayAboutDialog () {final AlertDialog.Builder builder = new AlertDialog.Builder (this); builder.setTitle (getString (R.string.about_title)); builder.setMessage (getString (R.string.about_desc)); builder.setPositiveButton (“Saber más”, nuevo DialogInterface.OnClickListener () {public void onClick (DialogInterface dialog, int id) {Intent browserIntent = new Intent (Intent.ACTION_VIEW, Uri.parse (” http: //javatechig.com&quot ; )); startActivity (browserIntent); dialog.cancel ();}}); builder.setNegativeButton (“No Thanks!”, new DialogInterface.OnClickListener () {public void onClick (DialogInterface dialog, int id) {dialog.cancel ( );}}); builder.show ();} @Override Void protegido onListItemClick (ListView l, View v, int position, long id) {super.onListItemClick (l, v, position, id); ApplicationInfo app = applist. get (position); try {Intent intent = packageManager .getLaunchIntentForPackage (app.packageName); if (null! = intent) {startActivity (intent);}} catch (ActivityNotFoundException e) {Toast.makeText (AllAppsActivity.this, e. getMessage (), Toast.LENGTH_LONG) .show ();} catch (Exception e) {Toast.makeText (AllAppsActivity.this, e.getMessage (), Toast.LENGTH_LONG) .show ();}} Li privado st checkForLaunchIntent (List list) {ArrayList applist = new ArrayList (); for (ApplicationInfo info: list) {try {if (null! = packageManager.getLaunchIntentForPackage (info.packageName)) {applist.add (info); }} catch (Excepción e) {e.printStackTrace (); }} volver a la lista de aplicaciones; } clase privada LoadApplications extiende AsyncTask {private ProgressDialog progress = null; @Override protegido Void doInBackground (Void … params) {applist = checkForLaunchIntent (packageManager.getInstalledApplications (PackageManager.GET_META_DATA)); listadaptor = nuevo ApplicationAdapter (AllAppsActivity.this, R.layout.snippet_list_row, applist); volver nulo; } @Override protected void onCancelled () {super.onCancelled (); } @Override protected void onPostExecute (resultado vacío) {setListAdapter (listadaptor); progress.dismiss (); super.onPostExecute (resultado); } @Override protected void onPreExecute () {progress = ProgressDialog.show (AllAppsActivity.this, null, “Cargando información de la aplicación …”); super.onPreExecute (); } @Override protected void onProgressUpdate (Vacío … valores) {super.onProgressUpdate (valores); }}}

Sí, es posible. pero hay un problema, solo es posible cuando la aplicación de la que desea extraer información ha implementado el proveedor de contenido para compartir sus datos con otras aplicaciones.

Puede leer los detalles de los contactos en su aplicación de Android creada solo porque la aplicación de contactos de Android predeterminada ha implementado el proveedor de contenido y ha permitido que otras aplicaciones usen la base de datos de contactos.

Este es el diagrama más básico de cómo funciona esto.

Puede buscar el curso de proveedor de contenido en UDACITY

Allí tienen una buena explicación en video de los proveedores de contenido.

Para más detalles también puede echar un vistazo aquí

***** Puedes echar un vistazo a mi aplicación aquí *****

Sí, es posible si la aplicación de la que desea información lo permite.

Se llama implementación del proveedor de contenido en la aplicación base. La cantidad máxima de aplicaciones extrae detalles de contacto solo con esto

La observación más común sería cuando juegas un juego en Facebook o inicias sesión en cualquier otra aplicación a través de google + o facebook, luego verás la lista de información que facebook o google + compartiría con esa aplicación y debes permitirla.