当前位置:  编程技术>移动开发
本页文章导读:
    ▪Concurrent并发库常见有关问题总结        Concurrent并发库常见问题总结 对于Android开发者来说掌握Java的concurrent并发库十分重要,本次Android123就并发库的一些常见问题做总结:  1. 原子操作  如果你过去开发过Win32驱动可能发现很多N.........
    ▪ 解决EditText在光标位置安插字符串,光标不会往后挪动的方法        解决EditText在光标位置插入字符串,光标不会往后挪动的方法   ‍‍EditText editor = (EditText)getCurrentView(); int cursor = editor.getSelectionStart(); editor.getText().insert(cursor,delta);   ......
    ▪ 手机声音设立SensorListener及AudioManager       手机声音设置SensorListener及AudioManager 我们先要做的就是创建SensorManager对象完事我们在声明一个以私有类成员存储AudioManager模式,下面就是我们要创建SensorManager对象,取得SENSOR_SERVICE的服务.........

[1]Concurrent并发库常见有关问题总结
    来源: 互联网  发布时间: 2014-02-18
Concurrent并发库常见问题总结
对于Android开发者来说掌握Java的concurrent并发库十分重要,本次Android123就并发库的一些常见问题做总结:

  1. 原子操作

  如果你过去开发过Win32驱动可能发现很多Native API都是有关原子操作的(atomic operation),对于Java来说int、boolean这样的类型是原子的,而long和double就没有那么幸运了。原子操作是什么呢? 比如说Java线程的停止,在早期的JDK中提供了Thread.stop方法,但这个并不是线程安全的,而目前我们停掉一个Java线程都是用一个boolean变量来设置一个标记,你考虑这个boolean标记的改变是通过外部的其他线程,这样产生的同步问题如何解释呢? 这就是原子操作带来的好处,对于Long型我们可以使用java 1.5以后加入的concurrent.atomic的AtomicLong,对于Android来说支持以下原子类型:

AtomicBoolean、AtomicInteger、AtomicIntegerArray、AtomicIntegerFieldUpdater<T>、AtomicLong、AtomicLongArray、AtomicLongFieldUpdater<T> 、AtomicMarkableReference<V> 、AtomicReference<V> 、AtomicReferenceArray<E>、AtomicReferenceFieldUpdater<T, V> 和AtomicStampedReference<V>  。

2. 并发库的CopyOnWriteArrayList

  对于CopyOnWrite机制可以解决读取频繁,写入较少时的并发效果,有关这方面内容我们在 Android开发之Java并发包集合类性能分析 有过讲解。

3.


    
[2] 解决EditText在光标位置安插字符串,光标不会往后挪动的方法
    来源: 互联网  发布时间: 2014-02-18
解决EditText在光标位置插入字符串,光标不会往后挪动的方法

 

‍‍EditText editor = (EditText)getCurrentView();
int cursor = editor.getSelectionStart();
editor.getText().insert(cursor,delta);

 


    
[3] 手机声音设立SensorListener及AudioManager
    来源: 互联网  发布时间: 2014-02-18
手机声音设置SensorListener及AudioManager
我们先要做的就是创建SensorManager对象完事我们在声明一个以私有类成员存储AudioManager模式,下面就是我们要创建SensorManager对象,取得SENSOR_SERVICE的服务了,我们在用switch来设置一下正常模式、正常模式、正常模式。我们现在就可以设置扑捉事件了,完事我们在进行判断,最后我们在单独写个类,也就是封装一下三个模式下(正常模式、正常模式、正常模式)都干谢什么。最后大家可要记住了,我们要写一个onPause类,这个类的主要目的就的覆盖onPause事件,取消mSensorListener 。大家可要记住了,一定要写onPause类,要不在运行的时候,就会出现错误。往往简单的地方就是爱犯错的地方。那么我们就来看看代码吧。

package eoe.phone;

import android.app.Activity;
import android.content.Context;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.TextView;
public class EX06_12 extends Activity
{
/* 创建SensorManager对象 */
private SensorManager mSensorManager01;
private TextView mTextView01;

/* 以私有类成员存储AudioManager模式 */
private int strRingerMode;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mTextView01 = (TextView)findViewById(R.id.myTextView1);

/* 创建SensorManager对象,取得SENSOR_SERVICE服务 */
mSensorManager01 =
(SensorManager)getSystemService(Context.SENSOR_SERVICE);

/* 取得现在的AudioManager模式 */
GetAudioManagerMode();

/* 依据现在的AudioManager模式,显示于TextView当中 */
switch(strRingerMode)
{
/* 正常模式 */
case AudioManager.RINGER_MODE_NORMAL:
mTextView01.setText(R.string.str_normal_mode);
break;
/* 静音模式 */
case AudioManager.RINGER_MODE_SILENT:
mTextView01.setText(R.string.str_silent_mode);
break;
/* 震动模式 */
case AudioManager.RINGER_MODE_VIBRATE:
mTextView01.setText(R.string.str_vibrate_mode);
break;
}
}

/* 创建SensorListener捕捉onSensorChanged事件 */
private final SensorListener mSensorListener =
new SensorListener()
{
@Override
public void onSensorChanged(int sensor, float[] values)
{
// TODO Auto-generated method stub

//float fRollAngle = values[SensorManager.DATA_X];

/* 取得Y平面左右倾斜的Pitch角度 */
float fPitchAngle = values[SensorManager.DATA_Y];

/* 正面向下(Y轴旋转),经实验结果为小于-120为翻背面 */
if(fPitchAngle<-120)
{
/* 先设置为静音模式 */
ChangeToSilentMode();

/* 再设置为震动模式 */
ChangeToVibrateMode();

/* 判断铃声模式 */
switch(strRingerMode)
{
/* 正常模式 */
case AudioManager.RINGER_MODE_NORMAL:
mTextView01.setText(R.string.str_normal_mode);
break;
/* 静音模式 */
case AudioManager.RINGER_MODE_SILENT:
mTextView01.setText(R.string.str_silent_mode);
break;
/* 震动模式 */
case AudioManager.RINGER_MODE_VIBRATE:
mTextView01.setText(R.string.str_vibrate_mode);
break;
}
}
else
{
/* 正面向上(Y轴旋转),经实验结果为大于-120为翻正面 */
/* 更改为正常模式 */
ChangeToNormalMode();

/* 调用更改模式后,再一次确认手机的模式为何 */
switch(strRingerMode)
{
case AudioManager.RINGER_MODE_NORMAL:
mTextView01.setText(R.string.str_normal_mode);
break;
case AudioManager.RINGER_MODE_SILENT:
mTextView01.setText(R.string.str_silent_mode);
break;
case AudioManager.RINGER_MODE_VIBRATE:
mTextView01.setText(R.string.str_vibrate_mode);
break;
}
}
}

@Override
public void onAccuracyChanged(int sensor, int values)
{
// TODO Auto-generated method stub

}
};

/* 取得当下的AudioManager模式 */
private void GetAudioManagerMode()
{
try
{
/* 创建AudioManager对象,取得AUDIO_SERVICE */
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);

if (audioManager != null)
{
/* RINGER_MODE_NORMAL |
RINGER_MODE_SILENT |
RINGER_MODE_VIBRATE */

strRingerMode = audioManager.getRingerMode();
}
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.printStackTrace();
}
}

/* 更改为静音模式 */
private void ChangeToSilentMode()
{
try
{
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);

if (audioManager != null)
{
/* RINGER_MODE_NORMAL |
RINGER_MODE_SILENT |
RINGER_MODE_VIBRATE */

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
strRingerMode = audioManager.getRingerMode();
}
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.printStackTrace();
}
}

/* 更改为震动模式 */
private void ChangeToVibrateMode()
{
try
{
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);

if (audioManager != null)
{
/* 调用setRingerMode方法,设置模式 */
audioManager.setRingerMode
(
AudioManager.RINGER_MODE_VIBRATE
);
/* RINGER_MODE_NORMAL |
RINGER_MODE_SILENT |
RINGER_MODE_VIBRATE */
strRingerMode = audioManager.getRingerMode();
}
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.printStackTrace();
}
}

/* 更改为正常模式 */
private void ChangeToNormalMode()
{
try
{
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);

if (audioManager != null)
{
/* RINGER_MODE_NORMAL |
RINGER_MODE_SILENT |
RINGER_MODE_VIBRATE */
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
strRingerMode = audioManager.getRingerMode();
}
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.printStackTrace();
}
}

@Override
protected void onResume()
{
// TODO Auto-generated method stub

/* 注册一个SensorListener的Listener */
/* 传入Sensor模式与rate */
mSensorManager01.registerListener
(
mSensorListener,
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_NORMAL
);
super.onResume();
}

@Override
protected void onPause()
{
// TODO Auto-generated method stub

/* 于覆盖onPause事件,取消mSensorListener */
mSensorManager01.unregisterListener(mSensorListener);
super.onPause();
}
}

    
最新技术文章:
▪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,