2017-08-13 71 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循环首先执行意图,我一整天都在努力挣扎,真的很烦人。 –