当前位置: 编程技术>移动开发
本页文章导读:
▪调用系统发送邮件,拨通电话,浏览器 调用系统发送邮件,拨打电话,浏览器
1.发送邮件
/**
* 调用这个方法,发送邮件给指定的邮箱地址
* */
public void sendEmail(String email)
{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(.........
▪ 按键的双击事件及再按一次退出的打包 按键的双击事件及再按一次退出的封装
本文原创,转载请注明原文出处:http://maosidiaoxian.iteye.com/blog/1472873或者我的另外一个博客: http://msdxblog.sinaapp.com/?p=371现在许多应用都有一个“再按.........
▪ 监听手机挥动SensorEventListener 监听手机晃动SensorEventListener
http://blog.csdn.net/xfks555/article/details/6703464
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import and.........
[1]调用系统发送邮件,拨通电话,浏览器
来源: 互联网 发布时间: 2014-02-18
调用系统发送邮件,拨打电话,浏览器
1.发送邮件
/**
* 调用这个方法,发送邮件给指定的邮箱地址
* */
public void sendEmail(String email)
{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");//这句要有啊!
intent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{email + ""});//收件人应该是一个String数组,不能是String,否则无法自动识别收件人
startActivity(Intent.createChooser(intent, "神马?"));
}
2.拨打电话
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));//拨打电话
startActivity(intent);
3.浏览器
/**
* 调用浏览器
* */
public void callExplorer(String url)
{
try{
Uri uri = Uri.parse(url); //url为你要链接的地址,注意:这里要有http://,不然就被catch啦
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}catch(ActivityNotFoundException e){
ShowToast.show(this,"亲,无法打开站点,请确认该链接是否有效~");
}
}
权限:
<uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
[2] 按键的双击事件及再按一次退出的打包
来源: 互联网 发布时间: 2014-02-18
按键的双击事件及再按一次退出的封装
本文原创,转载请注明原文出处:http://maosidiaoxian.iteye.com/blog/1472873
或者我的另外一个博客: http://msdxblog.sinaapp.com/?p=371
现在许多应用都有一个“再按一次退出”的效果,其实实现这个不难,具体可以看我的另外一篇文章:http://maosidiaoxian.iteye.com/blog/1403040
不过最近又对以前写的东西再次封装,原因是以前是写死了,一定是“再次一次退出”的效果,而没有“再按一次XXX”的。而出现这个需求是因为最近在写的一个小的游戏应用,有“新游戏”的按钮,我觉得在响应这个事件时先弹出一个对话框来确认是否开始新游戏没什么必要,因为频率比较高,久了用户会很烦。朋友说可以做成“再按一次开始新游戏”。
于是封装了“再次一次XXX”的代码。具体如下:
然后关于再按一次退出,仅需要继承以上类并实现其抽象方法即可。
以下是“再次一次退出”的再次封装。不过这里我用的是单例模式,一个是我觉得对于一个应用,退出也就完了,所以它对应的这个“再次一次退出”的辅助类也是只有一个的,另一个是单例模式的话,我不需要为它写个成员变量,再在一开始的时候对它初始化,对我原来的代码影响很小。代码如下:
注意,在退出之后需要对exitDoubleClick赋值为null(或者可以调用System.exit(0)方法?),否则在下次启动时可能无法正常退出,因为这时调用的mContext已经不是当前的Activity实例了,所以无法对当前的Activity实例用finish()退出。
本文原创,转载请注明原文出处:http://maosidiaoxian.iteye.com/blog/1472873
或者我的另外一个博客: http://msdxblog.sinaapp.com/?p=371
现在许多应用都有一个“再按一次退出”的效果,其实实现这个不难,具体可以看我的另外一篇文章:http://maosidiaoxian.iteye.com/blog/1403040
不过最近又对以前写的东西再次封装,原因是以前是写死了,一定是“再次一次退出”的效果,而没有“再按一次XXX”的。而出现这个需求是因为最近在写的一个小的游戏应用,有“新游戏”的按钮,我觉得在响应这个事件时先弹出一个对话框来确认是否开始新游戏没什么必要,因为频率比较高,久了用户会很烦。朋友说可以做成“再按一次开始新游戏”。
于是封装了“再次一次XXX”的代码。具体如下:
/*
* @(#)DoubleClick.java Project:com.sinaapp.msdxblog.androidkit
* Date:2012-3-20
*
* Copyright (c) 2011 CFuture09, Institute of Software,
* Guangdong Ocean University, Zhanjiang, GuangDong, China.
* All rights reserved.
*/
package com.sinaapp.msdxblog.androidkit.ui.util;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerThread;
import android.widget.Toast;
/**
* @author Geek_Soledad (66704238@51uc.com)
*/
public abstract class DoubleClick {
protected Context mContext;
private boolean willDo;
private Runnable task = new Runnable() {
@Override
public void run() {
willDo = false;
}
};
public DoubleClick(Context context) {
mContext = context;
}
/**
* 当某个动作要双击才执行时,调用此方法。
*
* @param delayTime
* 判断双击的时间。
* @param msg
* 当第一次点击时,弹出的提示信息。如果为null,则不作提示。
*/
public void doDoubleClick(int delayTime, String msg) {
if (willDo) {
doOnDoubleClick();
} else {
keepInDelayTime(delayTime);
showMsgInToast(delayTime, msg);
}
}
/**
* 在双击之后执行的事情。
*/
abstract protected void doOnDoubleClick();
/**
* 判断是否双击。
*
* @param delayTime
* 是否双击的判断时间。
*/
final private void keepInDelayTime(int delayTime) {
willDo = true;
HandlerThread thread = new HandlerThread("doTask");
thread.start();
new Handler(thread.getLooper()).postDelayed(task, delayTime);
}
/**
* 显示提示信息。
*
* @param msg
* 要显示的信息。
*/
private void showMsgInToast(int delayTime, String msg) {
if (msg != null) {
Toast.makeText(mContext, msg, delayTime).show();
}
}
}
然后关于再按一次退出,仅需要继承以上类并实现其抽象方法即可。
/** * 在双击之后执行的事情。 */ abstract protected void doOnDoubleClick();
以下是“再次一次退出”的再次封装。不过这里我用的是单例模式,一个是我觉得对于一个应用,退出也就完了,所以它对应的这个“再次一次退出”的辅助类也是只有一个的,另一个是单例模式的话,我不需要为它写个成员变量,再在一开始的时候对它初始化,对我原来的代码影响很小。代码如下:
/*
* @(#)ExitDoubleClick.java Project:com.sinaapp.msdxblog.androidkit
* Date:2012-3-20
*
* Copyright (c) 2011 CFuture09, Institute of Software,
* Guangdong Ocean University, Zhanjiang, GuangDong, China.
* All rights reserved.
*/
package com.sinaapp.msdxblog.androidkit.ui.util;
import android.app.Activity;
import android.content.Context;
/**
* 双击退出Activity的类。
*
* @author Geek_Soledad (66704238@51uc.com)
*/
public class ExitDoubleClick extends DoubleClick {
private static ExitDoubleClick exitDoubleClick;
private ExitDoubleClick(Context context) {
super(context);
}
/**
* 返回一个双击退出的实例。
*
* @param context
* @return ExitDoubleClick
*/
public static synchronized ExitDoubleClick getInstance(Context context) {
if (exitDoubleClick == null) {
exitDoubleClick = new ExitDoubleClick(context);
}
return exitDoubleClick;
}
/**
* 双击之后退出。
*/
@Override
protected void doOnDoubleClick() {
((Activity) mContext).finish();
exitDoubleClick = null;
}
/* (non-Javadoc)
* @see com.sinaapp.msdxblog.androidkit.util.DoubleClick#doDoubleClick(int, java.lang.String)
*/
@Override
public void doDoubleClick(int delayTime, String msg) {
if (msg == null || msg.equals("")) {
msg = "再按一次退出";
}
super.doDoubleClick(delayTime, msg);
}
}
注意,在退出之后需要对exitDoubleClick赋值为null(或者可以调用System.exit(0)方法?),否则在下次启动时可能无法正常退出,因为这时调用的mContext已经不是当前的Activity实例了,所以无法对当前的Activity实例用finish()退出。
[3] 监听手机挥动SensorEventListener
来源: 互联网 发布时间: 2014-02-18
监听手机晃动SensorEventListener
http://blog.csdn.net/xfks555/article/details/6703464
用法:
//震动
http://blog.csdn.net/xfks555/article/details/6703464
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
/**
*
* 一个检测手机摇晃的监听器
* @author fuzhengchao
*
*/
public class ShakeListener implements SensorEventListener {
//速度阈值,当摇晃速度达到这值后产生作用
private static final int SPEED_SHRESHOLD = 4000;
//两次检测的时间间隔
private static final int UPTATE_INTERVAL_TIME = 70;
//传感器管理器
private SensorManager sensorManager;
//传感器
private Sensor sensor;
//重力感应监听器
private OnShakeListener onShakeListener;
//上下文
private Context context;
//手机上一个位置时重力感应坐标
private float lastX;
private float lastY;
private float lastZ;
//上次检测时间
private long lastUpdateTime;
//构造器
public ShakeListener(Context c) {
//获得监听对象
context = c;
start();
}
//开始
public void start() {
//获得传感器管理器
sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
if(sensorManager != null) {
//获得重力传感器
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
//注册
if(sensor != null) {
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
}
}
//停止检测
public void stop() {
sensorManager.unregisterListener(this);
}
//摇晃监听接口
public interface OnShakeListener {
public void onShake();
}
//设置重力感应监听器
public void setOnShakeListener(OnShakeListener listener) {
onShakeListener = listener;
}
//重力感应器感应获得变化数据
public void onSensorChanged(SensorEvent event) {
//现在检测时间
long currentUpdateTime = System.currentTimeMillis();
//两次检测的时间间隔
long timeInterval = currentUpdateTime - lastUpdateTime;
//判断是否达到了检测时间间隔
if(timeInterval < UPTATE_INTERVAL_TIME)
return;
//现在的时间变成last时间
lastUpdateTime = currentUpdateTime;
//获得x,y,z坐标
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
//获得x,y,z的变化值
float deltaX = x - lastX;
float deltaY = y - lastY;
float deltaZ = z - lastZ;
//将现在的坐标变成last坐标
lastX = x;
lastY = y;
lastZ = z;
double speed = Math.sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)/timeInterval * 10000;
//达到速度阀值,发出提示
if(speed >= SPEED_SHRESHOLD)
onShakeListener.onShake();
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
用法:
ShakeListener shakeListener = new ShakeListener(this);//创建一个对象
shakeListener.setOnShakeListener(new OnShakeListener(){//调用setOnShakeListener方法进行监听
public void onShake() {
//对手机摇晃后的处理(如换歌曲,换图片,震动……)
//onVibrator();
}
});//震动
private void onVibrator() {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator == null) {
Vibrator localVibrator = (Vibrator) context.getApplicationContext()
.getSystemService("vibrator");
vibrator = localVibrator;
}
vibrator.vibrate(100L);
}
最新技术文章: