如何使用表面视图在用户不知情的情况下捕获图像?

2023-12-11

我想从 Android 相机捕获图像,但用户不知情。


public class Capture extends Activity {

public Uri fileUri;
public String filepath1="";


public static final int DONE=1;  
public static final int NEXT=2;  
public static final int PERIOD=0;  
private Camera camera;  
private int cameraId;     
private Timer timer;  
public static final int MEDIA_TYPE_IMAGE = 2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.autocapture);  
    try
    {
        cameraMethod();
    }
    catch(Exception e)
    {
        Log.e("camera","Not",e);
    }


}

public void cameraMethod()
{
    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {  
    } else {
        android.hardware.Camera.CameraInfo info =new android.hardware.Camera.CameraInfo();
        cameraId = findFrontFacingCamera();

        if (cameraId < 0) {  
        } else {  
            safeCameraOpen(cameraId);   
        }  
    }    

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    SurfaceView view = new SurfaceView(this);  
    try {  
        camera.setPreviewDisplay(view.getHolder());  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
    camera.startPreview();  
    Camera.Parameters params = camera.getParameters();  
    params.setJpegQuality(100);  
    camera.setParameters(params);  
    timer=new Timer(getApplicationContext(),threadHandler);  
    timer.execute();  

}

////////////////////////////////////thread Handler///////////////////////////////////////  
private Handler threadHandler = new Handler() {  
    public void handleMessage(android.os.Message msg) {       
        switch(msg.what){  
        case DONE:  
            // Trigger camera callback to take pic  
            camera.takePicture(null, null, photoCallback);

            break;  
        case NEXT:  
            timer=new Timer(getApplicationContext(),threadHandler);  
            timer.execute();  
            break;  
        }  
    }  
};  
Camera.PictureCallback mCall = new Camera.PictureCallback() {  
    public void onPictureTaken(byte[] data, Camera camera) {  
        //decode the data obtained by the camera into a Bitmap  
        //display.setImageBitmap(photo);  
        Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0, data.length); 

        Message.obtain(threadHandler, Capture.NEXT, "").sendToTarget();   
        //Log.v("MyActivity","Length: "+data.length);  
    }
};  
private int findFrontFacingCamera() {
    int cameraId = 0;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 1; i < numberOfCameras; i++) {
        CameraInfo info = new CameraInfo();
        Camera.getCameraInfo(i, info);
        if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {

            cameraId = i;
        }
        else
        {
            break;
        }
    }
    return cameraId;
}


@Override  
protected void onPause() {  
    if (timer!=null){  
        timer.cancel(true);  
    }  
    releaseCamera();  
    super.onPause();  
}       

private boolean safeCameraOpen(int id) {  
    boolean qOpened = false;  
    try {  
        releaseCamera();  
        camera = Camera.open(id);  
        qOpened = (camera != null);  
    } catch (Exception e) {  
        Log.e(getString(R.string.app_name), "failed to open Camera");  
        e.printStackTrace();  
    }  
    return qOpened;    
}  


private void releaseCamera() {  
    if (camera != null) {  
        camera.stopPreview();  
        camera.release();  
        camera = null;  
    }  
}  


Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {


        OutputStream imageFileOS;


        try {

            imageFileOS = getContentResolver().openOutputStream(fileUri);
            imageFileOS.write(data);
            imageFileOS.flush();
            imageFileOS.close();
            Toast.makeText(Capture.this, "Image saved: " + fileUri, Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        }

        String sadf = fileUri.toString();

        Log.e("File url for sd card", ""+sadf);


        Intent myintent1=new Intent(Capture.this,MailSenderGmail1.class);        
        myintent1.putExtra("uris", sadf);
        myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(myintent1);
        finish();
    }
};

private static Uri getOutputMediaFileUri(int type){

    return Uri.fromFile(getOutputMediaFile(type));
}
/** Create a File for saving an image or video */
private static File getOutputMediaFile(int type){

    // Check that the SDCard is mounted
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "TheftImageCapture");

    // Create the storage directory(MyCameraVideo) if it does not exist
    if (! mediaStorageDir.exists()){

        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraVideo", "Failed to create directory Theft Image.");

            return null;

        }
    }
    java.util.Date date= new java.util.Date();
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
    .format(date.getTime());

    File mediaFile;

    if(type == MEDIA_TYPE_IMAGE) {

        // For unique video file name appending current timeStamp with file name
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                "IMG_"+ timeStamp + ".jpg");

    } else {
        return null;
    }

    return mediaFile;
}
}

TimerThread Class:

public class Timer extends AsyncTask<Void, Void, Void> {  
Context mContext;  
private Handler threadHandler;  
public Timer(Context context,Handler threadHandler) {  
    super();  
    this.threadHandler=threadHandler;  
    mContext = context;  
}  
@Override  
protected Void doInBackground(Void...params) {   
    try {  
        Thread.sleep(Capture.PERIOD);  
    } catch (InterruptedException e) {  
        e.printStackTrace();  
    }   
    Message.obtain(threadHandler, Capture.DONE, "").sendToTarget();   
    return null;  
}  

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用表面视图在用户不知情的情况下捕获图像? 的相关文章

  • 使用匕首柄作为依赖注入来处理多个改造客户端?

    我想在我的 android 应用程序中使用两个不同的后端 具有不同的响应格式 我使用 hilt 作为依赖注入 并对网络调用进行改造 这非常适合工作 因为我已经添加了第二个服务器网络文件和应用程序模块 所以它给了我错误 该错误列在最后 我需要
  • 如何在Android上获取当前播放曲目的路径[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想编写一个应用程序将当前播放的音乐流式传输到另一台设备 两个设备之间的连接确实有效 我还可以通过 wifi 传输一些字符串 但在获取
  • 如何通过代码检测Android上的表情符号支持

    通过代码 我可以制作一个按钮 将这 3 个表情符号插入到文本中 不过 在许多手机上 当用户单击按钮时 问题是 显示为 X X X 或者更糟糕的是 它只显示三个空白空间 我想在无法正确显示表情符号的 Android 设备上禁用并隐藏我自己的内
  • 如何以编程方式判断蓝牙设备是否已连接?

    我了解如何获取已配对设备的列表 但如何判断它们是否已连接 这一定是可能的 因为我看到它们列在我手机的蓝牙设备列表中 并且它说明了它们的连接状态 将蓝牙权限添加到您的AndroidManifest中
  • android:ScrollView(或视差)内的RecyclerView

    我有一个片段2 次卡片浏览内有多个控件 below我有第二个卡片视图回收者视图 这有效perfect 问题是 recyclerview 启动了屏幕的最底部 并且滚动recyclerview非常small 以前使用过列表视图 这使我可以适应您
  • 与通用地图相比,MapView 的分辨率较差

    我刚刚收到 HTC Desire 进行测试 我注意到 残留在小于整个屏幕的框架中的地图视图不如通用地图应用程序那么清晰 有什么办法解决这个问题吗 您应该使用 API 级别 4 或更高级别编译应用程序 然后在 AndroidManifest
  • 不使用eclipse安装Android模拟器

    如何在没有eclipse的电脑上安装android模拟器 android模拟器无需安装eclipse 只需下载 android sdk 并安装即可 安装android SDK之前必须先安装JDK 完成后安装成功 您将获得两个应用程序 SDK
  • 如何连接到Google Play服务并加载排行榜

    我想将我的游戏与 Google Play 服务连接 我已阅读有关 Android 开发人员的文档 并尝试遵循输入数字示例 但仍然无法加载排行榜 我有导入baseGameUtils 但我使用andengine 所以我没有使用来自谷歌的exte
  • 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

    我正在编写一个使用 RoboSpice 的应用程序 在请求侦听器 onRequestFailure SpiceException arg0 中 有没有办法确定该错误是由于发生 401 HTTP 错误而导致的 我有一个后端服务 当令牌过期时
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 使用 START_STICKY 启动时服务进程被终止后的 onStartCommand

    我一直在阅读 Android 文档 我想知道是否有人可以阐明当以 START STICKY 启动的服务的进程被终止时服务实例会发生什么情况 我假设本地状态数据 实例变量 也丢失了 Android 在重新创建服务时是否会采取任何措施来帮助重新
  • 在 Android 中使用 AES 加密的最佳实践是什么?

    我为什么问这个问题 我知道人们对 AES 加密存在很多疑问 即使对于 Android 也是如此 如果您在网络上搜索 会发现很多代码片段 但在每个页面上 在每个 Stack Overflow 问题中 我都发现了另一个具有重大差异的实现 所以我
  • 如何从画布中删除路径区域(Android)

    我需要裁剪角落ImageView 不要将它们弄圆 而是擦除每个角上的三角形 似乎唯一的方法就是覆盖onDraw方法并使用从画布上删除这些区域Path 问题是我没有纯色背景 所以我需要擦除这些区域 但不要用某种颜色填充它们 我为此使用以下代码
  • 何时调用 glMatrixMode()

    我所关注的大多数 Android OpenGL ES 教程都有其 onSurfaceChanged 函数 如下所示 public void onSurfaceChanged GL10 gl int width int height gl g
  • Android中如何使用intent加载本地html页面?

    我的 asset 目录中有一个 html 文件 我必须使用 Intent 将其加载为浏览器应用程序 这是我的代码 但它不起作用 startActivity new Intent Intent ACTION VIEW Uri parse fi
  • 有没有办法创建 PWA(渐进式 Web 应用程序)的 Android 桌面小部件?

    我正在构建一个渐进式 Web 应用程序 有没有办法创建 Android 桌面小部件 None
  • android - 如何让按钮每次按下时单击播放声音文件?

    我打开了一个新项目 现在我想做的是 通过按下按钮 我想要播放一个 mp3 文件 而且每次按下按钮时 声音文件都会再次从头开始播放 所以假设 mp3 长 10 秒 我按下按钮 它正在播放 4 秒后我再次按下按钮 声音将再次播放 现在我想知道的
  • JavaScript 点击事件在 Android 4.0.4 默认浏览器上的 Samsung Galaxy SIII 上不起作用

    我在 Android 4 0 4 上使用 Samsung Galaxy SIII 的默认浏览器时遇到了最奇怪的问题 对于以下页面 单击链接将不会触发 JavaScript 处理程序 从其中一个 div 的内容中删除单个 a 字母使它们再次工
  • 片段中的 SavedInstanceState 始终为 null

    我使用 XML 以及活动中的 setContentView 将片段附加到活动 A 有一个问题 因为我的片段中有非常动态的视图 所以当方向改变时 我必须恢复所有的观点状态 我有问题 因为我正在使用类似的东西 public void onSav
  • Android:我的应用程序太大并给出“无法执行 dex:方法 ID 不在 [0, 0xffff]: 65536”?

    我正在尝试将我的应用程序与 Box Dropbox 和 Google Drive 集成 所有这 3 项服务都需要许多第 3 方 jar 此外 我的应用程序已经需要一些第三方 jar 现在 当我尝试从 Eclipse 运行我的应用程序时 出现

随机推荐

  • 了解使用 Photoshop 生成的 24 位 PNG

    具有透明度的 24 位 png 文件 可以使用以下命令生成Photoshop 真的有 24 位分布在每种颜色加上 alpha 上吗 或者 24 位仅指颜色并忽略 alpha RGBA 8888 有没有工具可以检查 PNG 文件并验证此类信息
  • 具有多个图像的 Pod

    创建一个名为 xyz 的 pod 其中包含一个容器 用于在其中运行以下每个映像 指定的映像可能在 1 到 4 个之间 nginx redis Memcached consul 问题不太清楚 但假设您希望一个 Pod 具有多个容器 下面是可以
  • 错误:结果不是以下位置的数据框:

    我正在尝试在相当大的数据框上运行拟合函数 该数据框由名为的变量分组 big group and small group 特别是 我试图获得每个的预测和 coefs 值small group代替big group 也就是说 我试图将这些新列添
  • 有没有什么好的方法来加密C#桌面应用程序[重复]

    这个问题在这里已经有答案了 可能的重复 保护 NET 代码免遭逆向工程 我们只是用C winforms开发一个应用程序 有什么好的加密方法可以帮助我们防止盗版吗 我看到有些软件可能需要硬件支持来保护其软件 如何实现 提前致谢 好吧 你在这里
  • 不读取模型[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在用Python编写一个程序 我想连接GPT4ALL 以便该程序像GPT聊天一样工作 仅在我的编程环境中本地运行 为此 我已经安装了 GPT4All 13B snoozy ggmlv3
  • 在 javascript 警报中编写 php

    我用以下方式在JS中编写PHP alert echo Error login 关联一个xml 用symfony翻译成两种语言 但现在不起作用 我该如何解决 您缺少引号alert call alert
  • Ruby on Rails - 将模型中的字段添加到另一个模型的表单上

    我有两个型号Contract and Addendum 合同has many addendums和附录belongs to contract 创建新合同时 将自动创建新的附录 但需要一些额外的元素来创建新的附录 如何添加字段value 这是
  • Pandas 中的顺序组内枚举

    假设我有以下数据框 date A B C D 0 2014 03 20 1 561714 0 979202 0 454935 0 629215 1 2014 03 20 0 390851 0 045697 1 683257 0 771027
  • 将引用(工具>引用)与 VBA 代码(宏)连接

    我想使用 VBA 代码以编程方式将一些引用连接到我的 VBA 项目 即无需使用 工具 gt 引用 手动设置引用 这可能吗 例如 Microsoft Office 12 0 对象库 您没有提到 Office 应用程序 在 MS Access
  • 使用 malloc 时出错

    I pass char input from main to processInExp 函数 然后我再次传递它processInExp 功能为getInput 函数在读取文件时动态分配它 Inside getInput 功能input检查时
  • 为什么 ASP.NET 网站没有 Designer.cs?

    如果我们在 Visual Studio 中创建 ASP NET Web 应用程序 我们可以看到每个 aspx 文件都会有一个关联的自动生成的 aspx designer cs 文件 但对于 ASP NET 网站 每个 aspx 文件只有一个
  • 如何屏蔽具有 RepeatVector() 层的 LSTM 自动编码器中的输入?

    我一直在尝试使用 LSTM 自动编码器获取向量序列的向量表示 以便我可以使用 SVM 或其他此类监督算法对序列进行分类 数据量阻止我使用完全连接的密集层进行分类 我的输入的最短大小是 7 个时间步长 最长的序列是 356 个时间步长 因此
  • _vscprintf 在 Android 上等效吗?

    vscprintf在 Android 上不可用 还vsprintf NULL fmt ap 不起作用 产生段错误 因此似乎无法计算 vsnprintf 成功所需的缓冲区大小 Android sources表明 android log pri
  • “304 Not Modified”到底是如何工作的?

    304 Not Modified 响应是如何生成的 浏览器如何判断HTTP请求的响应是否为304 是浏览器设置的还是服务器发送的 如果由服务器发送 服务器如何知道缓存中可用的数据 以及如何将304设置为图像 我的猜测 如果它是由浏览器生成的
  • Git pre-commit hook:使用 -a 标志提交时如何获取添加/修改的文件

    当我使用 git commit a 提交我的工作时 预提交挂钩中的 git diff diff filter ACM name only cached 无法获取 git 将添加的文件 那么对于这种情况 正确的解决方案是什么 这里的问题是gi
  • 如何禁用/启用对话框负积极按钮?

    请查看下面的自定义对话框 我在对话框上有一个编辑文本字段 如果文本字段为空 我想禁用positiveButton 我可以为文本字段获取 charListener 但我不确定如何设置positivebutton禁用或启用该侦听器 正负按钮的参
  • Apache Flink:如何在摄取时间模式下获取事件的时间戳?

    我想知道是否可以使用Flink的摄取时间模式来获取记录的时间戳 考虑以下 flink 代码示例 https github com apache flink blob master flink examples flink examples
  • 在启用安全管理命令后,Glassfish 5 将无法启动

    输入enable secure admin 命令后 我无法运行 Glassfish 5 我有明确的操作系统 Ubutntu 服务器 16 04 然后我安装 java 8 并下载 zip 文件中的 glassfish 服务器 可能是什么问题呢
  • 如何使用 Graph-API 在 Facebook 中搜索特定位置的所有用户

    我有一个项目 我必须在 Facebook 上搜索所有人 特定位置 然后对数据应用进一步的过滤器 我的问题和问题是 如何使用 Graph API 获取初始数据 我知道这是可能的 使用 Facebook 本身的搜索字段 只需输入 所有居住在 的
  • 如何使用表面视图在用户不知情的情况下捕获图像?

    我想从 Android 相机捕获图像 但用户不知情 public class Capture extends Activity public Uri fileUri public String filepath1 public static