Se dice que mi aplicación para Android tiene un virus

He subido una aplicación en la tienda de Play y he recibido varios comentarios que tiene un virus en ella y que a veces obliga al móvil a reiniciarse. El código en mi aplicación es tan simple: sólo una actividad que tiene varios puntos y se puede oírlos o configurarlos como tono de llamada. ¿Me puede sugerir algo?

Código de mi aplicación:

b1_2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(saveas(soundid,save_name)){ Toast.makeText(Main.this, "The sound was set as ringtone!", Toast.LENGTH_LONG).show(); }; } }); public boolean saveas(int ressound,String filename){ byte[] buffer=null; InputStream fIn = getBaseContext().getResources().openRawResource(ressound); int size=0; try { size = fIn.available(); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block return false; } String path="/sdcard/media/ringtones/"; boolean exists = (new File(path)).exists(); if (!exists){new File(path).mkdirs();} FileOutputStream save; try { save = new FileOutputStream(path+filename); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block return false; } catch (IOException e) { // TODO Auto-generated catch block return false; } sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "clip_"+save_name); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.ARTIST, "clip"); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); values.put(MediaStore.Audio.Media.IS_ALARM, true); values.put(MediaStore.Audio.Media.IS_MUSIC, true); //Insert it into the database Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); Uri newUri= this.getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri( this, RingtoneManager.TYPE_RINGTONE, newUri); return true; } 

Los permisos requeridos son:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Funciona sin Internet, pero sólo tengo un enlace directo a mi página de desarrolladores en google play store y con el fin de evitar accidentes He utilizado esta función:

 (if link is pressed) if (isOnline()){ open page } else { do nothing } public boolean isOnline() { boolean connectedWifi = false; boolean connectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] networks = cm.getAllNetworkInfo(); for (NetworkInfo ni : networks) { if ("WIFI".equalsIgnoreCase(ni.getTypeName())) if (ni.isConnected()) connectedWifi = true; if ("MOBILE".equalsIgnoreCase(ni.getTypeName())) if (ni.isConnected()) connectedMobile = true; } return connectedWifi || connectedMobile; } 

En primer lugar, el concepto de que su aplicación de Android "tiene un virus" es tonto. Si hay código malicioso en tu aplicación, es porque has desarrollado tu aplicación con código malicioso.

Lo que es más que probable que ocurra aquí es que su aplicación tiene un error en él. Aún peor, el SDK de Android que usan sus usuarios también tiene un error (porque el sistema operativo está fallando y eso nunca debería ocurrir). Sin pasar por y analizar todo el código, va a ser muy difícil para cualquiera de aquí darle una respuesta directa en cuanto a dónde está el error en su código y / o el SDK de Android.

Yo sugeriría averiguar qué dispositivos y versiones SDK este error se ha experimentado con, y luego empezaría a probar la aplicación en esos dispositivos / SDKs. Puesto que usted piensa que el error puede estar relacionado con la conexión a Internet, pruebe la aplicación con conexión a Internet habilitada, deshabilitada y con una conexión débil. Tenga en cuenta que es posible que se esté ejecutando un error conocido en un SDK de Android anterior.

También puede iniciar su próxima versión con Crittercism (u otra biblioteca similar) instalada para ayudarle a rastrear el fallo.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.