Reputation: 5259
I have uploaded an app in the Play store and I have received several comments that it has a virus in it and it sometimes forces the mobile to reboot itself. The code in my app is so simple: only one activity that has several spots and either you can hear them or set them as a ringtone. Can you suggest me anything?
Code of my app:
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;
}
Permissions required are:
<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" />
It works without internet but I just have a direct link to my developers page in google play store and in order to avoid crashes I have used this function:
(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;
}
Upvotes: 4
Views: 5333
Reputation: 16714
First of all, the concept that your Android app "has a virus" is silly. If there is malicious code in your app, then it is because you developed your app with malicious code in it.
What is more than likely happening here is that your app has a BUG in it. Even worse, the Android SDK that your user(s) are using also has a bug in it (because the OS is crashing and that should never happen). Without going through and analyzing all of your code, it's going to be pretty hard for anyone on here to give you a direct answer as to where the bug in your code and/or the Android SDK is.
I would suggest figuring out what devices and SDK versions this bug has been experienced with, and then I would start testing the app on those devices/SDKs. Since you think the bug may be related to internet connection, test the app with internet connection enabled, disabled, and with a weak connection. Keep in mind that it is possible that you are running into a known bug in a previous Android SDK.
You could also launch your next version with Crittercism (or another similar library) installed to help you track down the crash.
Upvotes: 2