华域联盟 Andriod 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); 
} 
} 

界面如下图:

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

本文由 华域联盟 原创撰写:华域联盟 » android实现定时拍照并发送微博功能

转载请保留出处和原文链接:https://www.cnhackhy.com/106785.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

Android 8.0升级不跳转应用安装页面的解决方法

Android仿微信公众号文章页面加载进度条

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们