热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

android实现定时拍照并发送微博功能

这篇文章主要为大家详细介绍了android实现定时拍照并发送微博功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近在做android方面的开发,下面是android自动对焦并拍照的小例子:

package com.comnvi.camera; 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
 
import com.comnvi.camera.share.AccessTokenKeeper; 
import com.tencent.mm.sdk.openapi.IWXAPI; 
import com.tencent.weibo.oauthv2.OAuthV2; 
import com.weibo.sdk.android.Oauth2AccessToken; 
import com.weibo.sdk.android.Weibo; 
import com.weibo.sdk.android.WeiboAuthListener; 
import com.weibo.sdk.android.WeiboDialogError; 
import com.weibo.sdk.android.WeiboException; 
import com.weibo.sdk.android.api.StatusesAPI; 
import com.weibo.sdk.android.net.RequestListener; 
import com.weibo.sdk.android.sso.SsoHandler; 
 
import android.app.Activity; 
import android.content.Intent; 
import android.hardware.Camera; 
import android.hardware.Camera.AutoFocusCallback; 
import android.hardware.Camera.PictureCallback; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.Looper; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceHolder.Callback; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.Toast; 
 
public class MainActivity extends Activity{ 
 private Weibo mWeibo; 
 SsoHandler mSsoHandler; 
 public static final String SINA_CONSUMER_KEY = "2022960751"; 
 public static final String SINA_REDIRECT_URL = "http://sns.whalecloud.com/sina2/callback"; 
 // 按钮面板 
 private View mPannelController; 
 // 报像头 
 private Camera mCamera; 
 public static Oauth2AccessToken accessToken; 
 StatusesAPI api; 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 System.out.println("onCreate"); 
 
 requestWindowFeature(Window.FEATURE_NO_TITLE); 
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
  WindowManager.LayoutParams.FLAG_FULLSCREEN); 
 setContentView(R.layout.main); 
 
 mPannelCOntroller= this.findViewById(R.id.buttonlayout); 
 // 创建 定时线程 注意不要使用Timer 
 pool = Executors.newFixedThreadPool(1); 
 // 预览控件 
 SurfaceView surfaceView = (SurfaceView) this 
  .findViewById(R.id.surfaceView); 
 // 设置参数 
 surfaceView.getHolder().setFixedSize(176, 144); 
 surfaceView.getHolder().setKeepScreenOn(true); 
 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
 surfaceView.getHolder().addCallback(new SurfaceCallback()); 
 // 添加事件 
 final Button start = (Button) findViewById(R.id.takepicture); 
 start.setOnClickListener(new OnClickListener() { 
 
  @Override 
  public void onClick(View v) { 
  if (mCamera != null) { 
   start.setEnabled(false); 
   // 拍照前需要对焦 获取清析的图片 
   mCamera.autoFocus(new AutoFocusCallback() { 
   // 对焦结束 
   @Override 
   public void onAutoFocus(boolean success, Camera camera) { 
    // 对焦成功 
    Toast.makeText(MainActivity.this, "对焦成功 !!", 
     Toast.LENGTH_SHORT).show(); 
    mIsRunning = true; 
    // 10s 一张 
    pool.execute(mRunnable); 
    //mCamera.takePicture(null, null, new MyPictureCallback()); 
   } 
   }); 
  } 
  } 
 }); 
 
 Button end = (Button) findViewById(R.id.endtake); 
 end.setOnClickListener(new OnClickListener() { 
  @Override 
  public void onClick(View v) { 
  mIsRunning = false; 
  // 取消任务 
  start.setEnabled(true); 
 
  } 
 }); 
  mWeibo = Weibo.getInstance(SINA_CONSUMER_KEY, SINA_REDIRECT_URL); 
  accessToken = AccessTokenKeeper.readAccessToken(this); 
 Button sina = (Button) findViewById(R.id.sina); 
 sina.setOnClickListener(new OnClickListener() { 
  @Override 
  public void onClick(View v) { 
  mSsoHandler = new SsoHandler(MainActivity.this, mWeibo); 
  mSsoHandler.authorize(new UserInfoListener()); 
  } 
 }); 
 } 
 class UserInfoListener implements WeiboAuthListener{ 
 @Override 
 public void onCancel() { 
  Log.v("sina", "------onCancel"); 
 } 
  
 
 @Override 
 public void onComplete(Bundle arg0) { 
  String token = arg0.getString("access_token"); 
  String expires_in = arg0.getString("expires_in"); 
  accessToken = new Oauth2AccessToken( 
   token, expires_in); 
  
 } 
 
 @Override 
 public void onError(WeiboDialogError arg0) { 
  Log.v("sina", "------onError"+arg0.getMessage()); 
  
 } 
 
 @Override 
 public void onWeiboException(WeiboException arg0) { 
  Log.v("sina", "------onWeiboException"+arg0.getMessage()); 
  
 } 
  
 } 
 
 @Override 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 if (mSsoHandler != null) { 
  Log.v("time", "sso回调"); 
  mSsoHandler.authorizeCallBack(requestCode, resultCode, data); 
 
 } 
 } 
 
 @Override 
 protected void onDestroy() { 
 super.onDestroy(); 
 mIsRunning = false; 
 if (pool != null) { 
  pool.shutdownNow(); 
 } 
 } 
 
 // 定时器 
 private ExecutorService pool = null; 
 private boolean mIsRunning = true; 
 // 定时任务 
 private Runnable mRunnable = new Runnable() { 
 @Override 
 public void run() { 
  // 定时触发拍照方法 
  while (mIsRunning) { 
  mCamera.takePicture(null, null, new MyPictureCallback()); 
  try { 
   Thread.sleep(100* 1000); 
  } catch (InterruptedException e) { 
   e.printStackTrace(); 
  } 
  } 
 
 } 
 }; 
 public void share(String path){ 
 if (accessToken.isSessionValid()&&!"".equals(path)) { 
  AccessTokenKeeper.keepAccessToken(MainActivity.this, accessToken); 
  api = new StatusesAPI(accessToken); 
  Date now=new Date(); 
  SimpleDateFormat temp=new SimpleDateFormat("MM月dd日 HH:mm"); 
  String str=temp.format(now); 
  
  api.upload(str+"测试分享", path, "0", "0", new RequestListener() { 
   
  @Override 
  public void onIOException(IOException arg0) { 
   Log.v("sina", "分享失败"+arg0.getMessage()); 
  } 
   
  @Override 
  public void onError(WeiboException arg0) { 
   Log.v("sina", "分享失败"+arg0.getMessage()); 
  } 
   
  @Override 
  public void onComplete(String arg0) { 
   Log.v("sina", "分享成功"+arg0); 
  } 
  }); 
 }else{ 
  mSsoHandler = new SsoHandler(MainActivity.this, mWeibo); 
  mSsoHandler.authorize(new UserInfoListener()); 
  share(path); 
 } 
 } 
 // 照片回调 
 private final class MyPictureCallback implements PictureCallback { 
 // 照片生成后 
 public void onPictureTaken(byte[] data, Camera camera) { 
  try { 
 
  System.out.println("onPictureTaken"); 
  File jpgFile = new File( 
   Environment.getExternalStorageDirectory()+"/ceshi"); 
  if (!jpgFile.exists()) { 
   jpgFile.mkdir(); 
  } 
  File jpgFile1 = new File( 
   jpgFile.getAbsoluteFile(), 
   System.currentTimeMillis() + ".jpg"); 
 
  System.out.println(jpgFile1.getAbsolutePath()); 
  Toast.makeText(MainActivity.this, 
   "保存成功 !!" + jpgFile1.getAbsolutePath(), 
   Toast.LENGTH_SHORT).show(); 
  FileOutputStream outStream = new FileOutputStream(jpgFile1); 
  outStream.write(data); 
  outStream.close(); 
  share(jpgFile1.getAbsolutePath()); 
  camera.startPreview(); 
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
 } 
 
 } 
 
 // 预览界面回调 
 private final class SurfaceCallback implements Callback { 
 // 预览界面被创建 
 public void surfaceCreated(SurfaceHolder holder) { 
  try { 
  System.out.println("surfaceCreated"); 
  mCamera = Camera.open();// 打开摄像头 
  Camera.Parameters parameters = mCamera.getParameters(); 
  parameters.setPreviewSize(800, 480); 
  parameters.setPreviewFrameRate(5); 
  parameters.setPictureSize(1024, 768); 
  parameters.setJpegQuality(80); 
  mCamera.setParameters(parameters); 
   
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
 } 
 
 public void surfaceChanged(SurfaceHolder holder, int format, int width, 
  int height) { 
  System.out.println("surfaceChanged"); 
  
  try { 
  mCamera.setPreviewDisplay(holder); 
  } catch (IOException e) { 
  // TODO Auto-generated catch block 
  e.printStackTrace(); 
  } 
  mCamera.startPreview();// 开始预览 
 } 
 
 // 预览界面被销毁 
 public void surfaceDestroyed(SurfaceHolder holder) { 
  System.out.println("surfaceDestroyed"); 
  if (mCamera != null) { 
  mCamera.release(); 
  mCamera = null; 
  } 
 } 
 
 } 
 
 @Override 
 public boolean onTouchEvent(MotionEvent event) { 
 if (event.getAction() == MotionEvent.ACTION_DOWN) { 
  mPannelController.setVisibility(ViewGroup.VISIBLE); 
  return true; 
 } 
 return super.onTouchEvent(event); 
 } 
 
} 

界面如下图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
author-avatar
风云时尚_榜中榜_434
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有