Android上最近捕获的文件事件拦截

Posted

技术标签:

【中文标题】Android上最近捕获的文件事件拦截【英文标题】:Recent captured file event interception on Android 【发布时间】:2015-10-26 21:13:25 【问题描述】:

我想做的只是添加带有最近捕获的文件名的日志行。不幸的是,由于以下指示的错误,应用程序失败。下面提供的堆栈中的代码和错误。

提前致谢,

阿纳尔

java.lang.RuntimeException: 传递结果失败 ResultInfowho=null, request=100, result=-1, data=null 到活动 az.justx.justx/az.justx.justx.MainActivity: java.lang.NullPointerException:尝试调用虚拟方法 'android.net.Uri android.content.Intent.getData()' 在一个空对象上 参考

private void interceptCameraButtonClick() 

    Button cameraButton = (Button) findViewById(R.id.cam);

    cameraButton.setOnClickListener(
            new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
                    imagesFolder.mkdirs(); // <----
                    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                    File image = new File(imagesFolder, "AD_" + timeStamp + ".jpg");
                    Uri uriSavedImage = Uri.fromFile(image);
                    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
                    startActivityForResult(imageIntent, 100);
                
            
    );



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 

    Log.i("Test", Integer.toString(resultCode));

    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) 
        if (resultCode == RESULT_OK) 
            // Image captured and saved to fileUri specified in the Intent
            Log.i("CALLED", "Image saved to:\n" +
                    data.getData());
            Toast.makeText(this, "Image saved to:\n" +
                    data.getData(), Toast.LENGTH_LONG).show();
         else if (resultCode == RESULT_CANCELED) 
            // User cancelled the image capture
         else 
            // Image capture failed, advise user
        
    


【问题讨论】:

您在创建意图时传递 uri,因此您不会在 data.getData() 中获取它。您必须直接使用该 URI。 【参考方案1】:

不要求相机将Intent中的Uri发回onActivityResult()。您已经知道Uri 是什么,正如您在EXTRA_OUTPUT 中所说的那样。您只需要使用该值。请务必将其包含在您保存的实例状态中,因为当相机应用程序处于前台时,您的进程可能会终止。

【讨论】:

以上是关于Android上最近捕获的文件事件拦截的主要内容,如果未能解决你的问题,请参考以下文章

Android图解浅析事件拦截机制

QT 捕获事件(全局拦截)

android 拦截事件

Android滑动事件冲突(上)

Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)

创建自定义 QGraphicsItem 时拦截鼠标事件