android-startActivityForResult(Activity间的跳转+回调)

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版权协议,转载请附上原文出处链接和本声明。