2012-07-15 71 views
4

我已經在Play商店中上傳了一個應用程序,並且我收到了幾條評論,指出它有病毒,它有時會強制手機重新啓動。我的應用程序中的代碼非常簡單:只有一個活動有幾個位置,您可以聽到它們或將它們設置爲鈴聲。你能告訴我什麼嗎?我的Android應用程序被報告有病毒

我的應用程序的代碼:

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; 
    } 

所需的權限是:

<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" /> 

它的工作原理沒有互聯網,但我只是在谷歌的直接鏈接到我的開發者頁面Play商店,以避免崩潰我已經使用這個功能:

(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; 
    } 
+0

有趣......不知道爲什麼他們說這是病毒..你需要什麼權限? – 2012-07-15 08:18:44

+0

編輯答案:互聯網連接(但它沒有互聯網工作)和寫入SD的權限,以便首先保存文件。 – ghostrider 2012-07-15 08:35:30

+0

如果你不需要互聯網,你爲什麼要求互聯網?或者你真的需要互聯網嗎?也許你應該提供應用程序反饋,並促進與你的直接溝通,以及促進對你的應用程序進行評分。當他們的手機重新啓動時,人們可能會覺得不會隨機喊出'病毒',並且認爲如果您的應用程序具有更簡單的通信方式,那麼您的應用程序就會受到指責。此外,我的應用程序的許多改進來自於更容易地向我們發送電子郵件。我強烈建議儘可能與用戶交談。 – 2012-07-17 19:51:16

回答

2

首先,你的Android應用程序的概念「有病毒」是愚蠢的。如果您的應用中存在惡意代碼,那是因爲您在其中開發了帶有惡意代碼的應用。

這裏可能發生的情況是您的應用程序中有一個BUG。更糟糕的是,您的用戶正在使用的Android SDK也存在一個bug(因爲操作系統正在崩潰,而且不應該發生)。如果沒有通過和分析你的所有代碼,這裏的任何人都會很難直接回答你的代碼和/或Android SDK中的錯誤。

我會建議搞清楚這個bug已經經歷了哪些設備和SDK版本,然後我會開始在這些設備/ SDK上測試應用程序。由於您認爲該錯誤可能與互聯網連接有關,請嘗試啓用互聯網連接,禁用並且連接不暢的應用程序。請記住,您有可能遇到以前的Android SDK中的已知錯誤。

您也可以使用Crittercism(或其他類似的庫)啓動您的下一個版本,以幫助您追蹤崩潰。

+0

手機上沒有sdk(除非您正在手機上構建應用程序)。你可能是指平臺。 – 2012-07-18 02:04:17

+0

由SDK版本我的意思是操作系統版本。 – 2012-07-18 02:06:10

相關問題