当前位置:  编程技术>移动开发
本页文章导读:
    ▪调用系统发送邮件,拨通电话,浏览器        调用系统发送邮件,拨打电话,浏览器   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”的代码。具体如下:
/*
 * @(#)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

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);
 }

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3