2017-08-13 47 views
-2

我試圖創建一個卸載程序,到目前爲止一切正常,但這裏是問題:我想在卸載後刷新應用程序列表,就是我想出了:如何將對象從意圖傳遞到onActivityResult()方法

private void uninstallApps(List<Apps> apps) { 
for (AppModel app : apps) { 
    Uri uri = Uri.fromParts("package", app.getPackageName(), null); 
    Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, uri); 
    startActivityForResult(intent, 1); 
    } 
} 

然後

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

} 

我怎樣才能通過 「應用程序」 變量從uninstallApps()到onActivityResult()?

+0

我不明白你的問題 – Salman500

回答

0

我們不會拿到包的細節,同時startActivityForResultIntent.ACTION_UNINSTALL_PACKAGE

在加時賽中與你的意圖,如果您設定的Intent.EXTRA_RETURN_RESULT像下面,你會得到在'onActivityResult android.intent.extra.INSTALL_RESULT,但我們應該在這種情況下照顧也,因爲如果用戶沒有卸載應用程序,那麼我們將在意圖中獲得空值,因此我們應該每次都檢查空值的意圖數據。

intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); 

如果您想設置基於任何應用程序的卸載刷新列表,最好的地方是廣播接收器

<action android:name="android.intent.action.PACKAGE_REMOVED" /> 

如果您在廣播中添加此過濾器,你會得到廣播,因爲您可以獲取卸載應用程序的軟件包詳細信息。

@Override 
public void onReceive(Context context, Intent intent) { 

    String packageName = intent.getData().getEncodedSchemeSpecificPart(); 

    Log.d("", "onReceive: " + intent.getAction()); 
    Log.d("", "onReceive: " + packageName); 

    // If the action is android.intent.action.PACKAGE_REMOVED then app is uninsatalled 
    if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) { 

     // Here you send one local broadcast to your activity or fragment and you can update in your view. 

    } 
} 
0

如何將「app」變量從uninstallApps()傳遞給onActivityResult()?

你它,它存儲在一個領域上的活動或片段類,無論你在呼喚startActivityForResult()和期待onActivityResult()回調。

+0

我試過了,但問題是,所有的意圖首先執行,那麼所有的corespondent onActivityResult()方法,所以我的應用程序存儲在一個領域時,它都會覆蓋在for循環的下一次迭代中 –

+0

@ToniJoe:「所有意圖都是先執行」 - 將代碼更改爲僅在前一個完成後纔開始下一個「ACTION_UNINSTALL_PACKAGE」活動。 – CommonsWare

+0

這就是問題所在,for循環首先執行意圖,我一整天都在努力掙扎,真的很煩人。 –