我有一个活动 A 和一个片段 B。
在 A 中,我有这种方法:
private void installApp(String path){
Intent i = new Intent(Intent.ACTION_VIEW);
fileUri = Uri.fromFile(new File(path));
i.setDataAndType(fileUri, "application/vnd.android.package-archive");
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
B.startActivityForResult(i, 101); //B has been initialized elsewhere
}
后来在 B 中调用此覆盖:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
try{
super.onActivityResult(requestCode, resultCode, data);
//Can't d stuff with data because it's Null.
}
}catch (Exception e){
//Handles the exception
}
}
我已经搜索了一段时间,但仍然无法弄清楚为什么数据为空。我错过了什么?!
谢谢。
在片段 B 中,你是在称呼startActivityForResult(new Intent(getActivity(), ActivityA.class), REQUEST_CODE)
吗?(REQUEST_CODE是一个整数)
如果是这样,那么:
在活动 A 中,您不会为结果启动活动。您需要调用: finish();
在活动 A 中,而不是 startActivityForResult();
更新代码,使其如下所示:
private void installApp(String path){
Intent i = new Intent(Intent.ACTION_VIEW);
fileUri = Uri.fromFile(new File(path));
i.setDataAndType(fileUri, "application/vnd.android.package-archive");
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
setResult(RESULT_OK, i);
finish();
}
ACTION_VIEW
的文档有"输出:无",这意味着ACTION_VIEW
实现不提供结果,因此将ACTION_VIEW
与startActivityForResult()
一起使用是没有意义的。