startActivityForResult跳转与startActivity跳转
startActivityForResult的跳转相比较于startActivity跳转多了返回原页面数据传输功能
其实就相当于两个Activity A 与 B
A先跳转到B 当B再跳转到A时 在A的中调用 onActivityResult 可接收来自B页面的传递信息
相对于startActivity常用于跳转至 **系统相机** 然后 返回照片的绝对路径
//跳转 其中i为标记 当返回时使用(想来是避免当代码中多个不同的Activity调用(虽然不会同时),用来标记的)
startActivityForResult(new Intent(A.this, B.class), i);
//跳转实例2-跳转相机并获取照片绝对路径 MediaStore.ACTION_IMAGE_CAPTURE即为系统相机
protected static final int REQUEST_CODE_CAMERA = 1; //标记
protected File cameraFile; //路径
public void opencapture{
//判断sd卡权限
if (!EaseCommonUtils.isSdcardExist()) {
Toast.makeText(getActivity(), SD卡权限未开, Toast.LENGTH_SHORT).show();
return;
}
//创建照片目录
cameraFile = new File(PathUtil.getInstance().getImagePath(), EMClient.getInstance().getCurrentUser()
+ System.currentTimeMillis() + ".jpg");
cameraFile.getParentFile().mkdirs();
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getProviderUri(cameraFile));//传入参数 获取临时照片 , 路径
cameraIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//设置 临时访问权限
cameraIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); //设置 临时访问权限
startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA ); //跳转
}
//7.0以上获取uri
private Uri getProviderUri(File file) {
String appPackageName = getActivity().getPackageName();
return FileProvider.getUriForFile(getActivity(),
appPackageName + ".provider", file);
}
```
//继承onActivityResult(requestCode 之前传入的用来校验 resultCode返回B的状态ok还是CANCELED data即为数据)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CODE_CAMERA ) { // capture new image
if (cameraFile != null && cameraFile.exists())
//此处进行照片处理 使用获取到的绝对路径 cameraFile.getAbsolutePath()
}else {
Toast.makeText(getActivity(), R.string.unable_to_get_loaction, Toast.LENGTH_SHORT).show();
}
} else if (requestCode == REQUEST_CODE_DING_MSG) { // To send the ding-type msg.
String msgContent = data.getStringExtra("msg");
EMLog.i(TAG, "To send the ding-type msg, content: " + msgContent);
// Send the ding-type msg.
EMMessage dingMsg = EaseDingMessageHelper.get().createDingMessage(toChatUsername, msgContent);
sendMessage(dingMsg);
}
}
}
版权声明:本文为qq_41550458原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。