简单的工作室

如何实现控制手机拍照没有声音

时间:2015-04-19 23:26来源:未知 作者:简单的工作室 点击:
最近发现一款手机防盗软件 http://www.zysafe.cn 智游防盗,其中有个远程解锁失败拍照功能,拍照的时候肯定是没有声音的,具体如何实现的?我来做了个初步的分析,和大家分享。 方法一: mAudioManager = (AudioManager) getSystemService (Context.AUDIO_SERVICE); mAudioM
最近发现一款手机防盗软件http://www.zysafe.cn智游防盗,其中有个远程解锁失败拍照功能,拍照的时候肯定是没有声音的,具体如何实现的?我来做了个初步的分析,和大家分享。
方法一:
mAudioManager = (AudioManager) getSystemService 
(Context.AUDIO_SERVICE);  
   mAudioManager.setRingerMode 
(AudioManager.RINGER_MODE_SILENT); 
    
   当然,你最好先记录下用户之前的模式 
    
   int ringerMode = mAudioManager.getRingerMode();  

   这样部分手机的静音拍照估计就可以 。

方法二:
步骤: 
   1.做一个预览界面 
   camera.xml <?xml version="1.0" encoding="utf- 
8"?> 
   <FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="300dp" 
       android:layout_height="150dp" 
    > 
       
        <SurfaceView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/surfaceview"/> 
    
   </FrameLayout> 
    
   CameraActivity.java 
   在onCreate里面要设置下面这些属性 
   public class CameraActivity extends Activity implements 
PreviewCallback { 
   public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera); 
    mSurfaceView = (SurfaceView) 
this.findViewById(R.id.surfaceview); 
    mSurfaceHolder = mSurfaceView.getHolder(); 
    mSurfaceHolder.addCallback(new 
SurfaceHolderCallback()); 
   mSurfaceHolder.setType 
(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
   } 
   ........................ 
   } 
    
   打开摄像头 
   前置摄像头的通用api是在android2.3才开始有的,所以这里也从2.3 
   public void surfaceCreated(SurfaceHolder holder) { 
   //打开前置摄像头 
   mCamera = Camera.openCamera 
(CameraInfo.CAMERA_FACING_FRONT); 
   //开始预览 
   mCamera.setPreviewCallback(CameraActivity.this); 
   mCamera.startPreview();/ 
   } 
   拍照+退出 
   public void onPreviewFrame(byte[] data, Camera camera) 

    int w = camera.getParameters 
().getPreviewSize().width; 
    int h = camera.getParameters 
().getPreviewSize().height; 
    save(w,h,data); 
   finish(); 
   } 
   保存 
   public void save(int w,int h,byte[] data){ 
   //预览编码为YUV420SP的视频流,需转换为RGB编码 
int RGBData[] = new int[w* h]; 
    byte[] mYUVData = new byte[data.length]; 
    System.arraycopy(data,0, mYUVData, 0,data.length); 
    decodeYUV420SP(RGBData, mYUVData, w,h); 
   //图片保存到sdcard 
    final Bitmap bitmap = Bitmap.createBitmap(w,h, 
Bitmap.Config.ARGB_8888); 
   try { 
    FileOutputStream outputStream = new 
FileOutputStream("/mnt/sdcard/" + UUID.randomUUID() + 
".png"); 
    bitmap.compress(CompressFormat.PNG, 50, 
outputStream); 
    outputStream.close(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
   } 
   5.manifest中还需要配置一些权限 
   <uses-permission 
android:name="android.permission.SYSTEM_ALERT_WINDOW" />  
   <uses-permission 
android:name="android.permission.CAMERA" />  
   <uses-permission 
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

这样基本就实现了,大家一起来讨论下。
(责任编辑:简单的工作室)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片