TelephonyManager
在程序中获取TelephonyManager只需要调用一下代码:
TelephonyManager tManager =
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
示例代码:
public
class
TelephonyStatus
extends
ActionBarActivity
{
ListView showView;
String[] statusNames;
ArrayList<String> statusValues = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TelephonyManager tManager = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
statusNames = getResources().getStringArray(R.array.statusNames);
String[] simState = getResources()
.getStringArray(R.array.simState);
String[] phoneType = getResources().getStringArray(
R.array.phoneType);
statusValues.add(tManager.getDeviceId());
statusValues.add(tManager.getDeviceSoftwareVersion()
!= null ? tManager.getDeviceSoftwareVersion():"unknown");
statusValues.add(tManager.getNetworkOperator());
statusValues.add(tManager.getNetworkOperatorName());
statusValues.add(phoneType[tManager.getPhoneType()]);
statusValues.add(tManager.getCellLocation()!= null?tManager
.getCellLocation().toString() : "unknown location");
statusValues.add(tManager.getSimCountryIso());
statusValues.add(tManager.getSimSerialNumber());
statusValues.add(simState[tManager.getSimState()]);
showView = (ListView) findViewById(R.id.show);
ArrayList<Map<String, String >> status =
new ArrayList<Map<String, String>>();
for (int i = 0; i < statusValues.size(); i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", statusNames[i]);
map.put("valu", statusValues.get[i]);
status.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, status
, R.layout.line, new String[]{"name","value"}
, new int []{R.id.name, R.id.value});
showView.setAdapter(adapter);
ListView showView;
String[] statusNames;
ArrayList<String> statusValues = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TelephonyManager tManager = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
statusNames = getResources().getStringArray(R.array.statusNames);
String[] simState = getResources()
.getStringArray(R.array.simState);
String[] phoneType = getResources().getStringArray(
R.array.phoneType);
statusValues.add(tManager.getDeviceId());
statusValues.add(tManager.getDeviceSoftwareVersion()
!= null ? tManager.getDeviceSoftwareVersion():"unknown");
statusValues.add(tManager.getNetworkOperator());
statusValues.add(tManager.getNetworkOperatorName());
statusValues.add(phoneType[tManager.getPhoneType()]);
statusValues.add(tManager.getCellLocation()!= null?tManager
.getCellLocation().toString() : "unknown location");
statusValues.add(tManager.getSimCountryIso());
statusValues.add(tManager.getSimSerialNumber());
statusValues.add(simState[tManager.getSimState()]);
showView = (ListView) findViewById(R.id.show);
ArrayList<Map<String, String >> status =
new ArrayList<Map<String, String>>();
for (int i = 0; i < statusValues.size(); i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", statusNames[i]);
map.put("valu", statusValues.get[i]);
status.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, status
, R.layout.line, new String[]{"name","value"}
, new int []{R.id.name, R.id.value});
showView.setAdapter(adapter);
}
}
为了调用远程的AIDL Service,开发者需要将Android源代码中如下两个文件复制到项目的相应位置
- com.android.internal.telephony包下的ITelephony.aidl
- android.telephony包下的NeighboringCellInfo.aidl
SmsManager
使用SmsManager发送短信,调用sendTextMessage()即可
另外需要授予程序发送短信的权限
<uses-permission android:name=“android.permission.SEND_SMS"/>
示例代码如下:
public
class
GroupSend
extends
ActionBarActivity
{
EditText numbers, content;
Button select, send;
SmsManager
sManager;
ArrayList<String> sendList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sManager =SmsManager.getDefault();
numbers = (EditText) findViewById(R.id.numbers);
content = (EditText) findViewById(R.id.content);
select = (Button) findViewById(R.id.select);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
for(String number: sendList)
{
PendingIntent pi = PendingIntent.getActivity(
GroupSend.this, 0, new Intent(), 0);
sManager.sendTextMessage(number,
null
, content.getText().toString(), pi, null);
}
Toast.makeText(GroupSend.this, "group send completed"
, Toast.LENGTH_SHORT).show();
}
});
select.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
final Cursor cursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
, null, null, null, null);
BaseAdapter adapter = new BaseAdapter()
{
@Override
public int getCount()
{
return cursor.getCount();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position
,View convertView, ViewGroup parent)
{
cursor.moveToPosition(position);
CheckBox rb = new CheckBox(GroupSend.this);
String number = cursor
.getString(curosr.getColumnIndex(ContactsContract
.CommonDataKinds.Phone.NUMBER))
.replace("-", "")
.replace(" ", "");
rb.setText(number);
if(isChecked(number))
{
rb.setChecked(true);
}
return rb;
}
};
View selectView = getLayoutInflater().inflate(
R.layout.list, null);
final ListView listView = (ListView) selectView
.findViewById(R.id.list);
listView.setAdapter(adapter);
new AlertDialog.Builder(GroupSend.this)
.setView(selectView)
.setPositionButton("sure",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
sendList.clear();
for(int i = 0; i < listView.getCount(); i++)
{
CheckBox checkBox = (CheckBox) listView.getChildAt(i);
if(checkBox.isChecked())
{
sendList.add(checkBox.getText().toString());
}
}
number.setText(sendList.toString());
}
}).show();
}
});
}
public boolean isChecked(String phone)
{
for(String s1 : sendList)
{
if( s1.equals(phone))
{
return true;
}
}
return false;
}
EditText numbers, content;
Button select, send;
ArrayList<String> sendList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sManager =
numbers = (EditText) findViewById(R.id.numbers);
content = (EditText) findViewById(R.id.content);
select = (Button) findViewById(R.id.select);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
for(String number: sendList)
{
PendingIntent pi = PendingIntent.getActivity(
GroupSend.this, 0, new Intent(), 0);
sManager.
, content.getText().toString(), pi, null);
}
Toast.makeText(GroupSend.this, "group send completed"
, Toast.LENGTH_SHORT).show();
}
});
select.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
final Cursor cursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
, null, null, null, null);
BaseAdapter adapter = new BaseAdapter()
{
@Override
public int getCount()
{
return cursor.getCount();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position
,View convertView, ViewGroup parent)
{
cursor.moveToPosition(position);
CheckBox rb = new CheckBox(GroupSend.this);
String number = cursor
.getString(curosr.getColumnIndex(ContactsContract
.CommonDataKinds.Phone.NUMBER))
.replace("-", "")
.replace(" ", "");
rb.setText(number);
if(isChecked(number))
{
rb.setChecked(true);
}
return rb;
}
};
View selectView = getLayoutInflater().inflate(
R.layout.list, null);
final ListView listView = (ListView) selectView
.findViewById(R.id.list);
listView.setAdapter(adapter);
new AlertDialog.Builder(GroupSend.this)
.setView(selectView)
.setPositionButton("sure",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
sendList.clear();
for(int i = 0; i < listView.getCount(); i++)
{
CheckBox checkBox = (CheckBox) listView.getChildAt(i);
if(checkBox.isChecked())
{
sendList.add(checkBox.getText().toString());
}
}
number.setText(sendList.toString());
}
}).show();
}
});
}
public boolean isChecked(String phone)
{
for(String s1 : sendList)
{
if( s1.equals(phone))
{
return true;
}
}
return false;
}
AudioManager
在程序获取AudioManager对象之后,接下来就可调用AudioManager的如下常用方法来控制手机音频了
- adjustStreamVolume(int streamType, int direction, int flags)调整手机指定类型的声音,其中,第一个streamType参数可以接受的值(STREAM_DTMF、STREAM_MUSIC、STREAM_NOTIFICATION、STREAM_RING、STREAM_SYSTEM、STREAM_VOICE_CALL);第二个参数指定对声音进行增大还是减小;第三个参数是调整声音时的标志
- setMicrophoneMute(boolean on):设置是否让麦克风静音
- setMode(int mode):设置声音模式,可设置的值有NORMAL、RINGTONE和IN_CALL
- setRingerMode(int ringerMode):设置手机的电话铃声的模式;有三种模式(RINGER_MODE_NORMAL、RINGER_MODE_SILENT、RINGER_MODE_VIBRATE)
- setSpeakerphoneOn(boolean on):设置是否打开扩音器
- setStreamMute(int streamType, boolean state):将手机的指定类型的声音调整为静音
- setStreamVolume(int streamType, int index, int flags):直接设置手机指定类型的音量值
示例代码:
public
class
AudioTest
extends
ActionBarActivity
{
Button play,up,down;
ToggleButton mute;
AudioManager aManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
aManager = (AudioManager) getSystemService(
Service.AUDIO_SERVICE);
play = (Button) findViewById(R.id.play);
up = (Button) findViewById(R.id.up);
down = (Button) findViewById(R.id.down);
mute = (ToggleButton) findViewById(R.id.mute);
play.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
MediaPlayer mPlayer = MediaPlayer.create(
AudioTest.this, R.raw.earth);
mPlayer.setLooping(true);
mPlayer.start();
}
});
up.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC
, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}
});
down.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC
, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
}
});
mute.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton source,
boolean isChecked)
{
aManager.setStreamMute(AudioManager.STREAM_MUSIC,
isChecked);
}
});
Button play,up,down;
ToggleButton mute;
AudioManager aManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
aManager = (AudioManager) getSystemService(
Service.AUDIO_SERVICE);
play = (Button) findViewById(R.id.play);
up = (Button) findViewById(R.id.up);
down = (Button) findViewById(R.id.down);
mute = (ToggleButton) findViewById(R.id.mute);
play.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
MediaPlayer mPlayer = MediaPlayer.create(
AudioTest.this, R.raw.earth);
mPlayer.setLooping(true);
mPlayer.start();
}
});
up.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC
, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}
});
down.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC
, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
}
});
mute.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton source,
boolean isChecked)
{
aManager.setStreamMute(AudioManager.STREAM_MUSIC,
isChecked);
}
});
}
}
振动器 Vibrator
获取Vibrator也是调用Context的getSystemService()方法即可
- vibrate(long milliseconds):控制手机振动milliseconds毫秒
- vibrate(long[] pattern, int repeat):指定手机以pattern指定模式振动。例如指定pattern为new int[400,800,1200,1600],repeat为数组索引,指定对pattern数组中从repeat索引开始的振动进行循环
- cancel():关闭手机振动
示例代码:
public
class
VibratorTest
extends
ActionBarActivity
{
Vibrator vibrator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vibrator = (Vibrator) getSystemService(
Service.VIBRATOR_SERVICE);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
Toast.makeText(this, "phone vibrate",
Toast.LENGTH_SHORT).show();
vibrator.vibrate(2000);
return super.onTouchEvent(event);
Vibrator vibrator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vibrator = (Vibrator) getSystemService(
Service.VIBRATOR_SERVICE);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
Toast.makeText(this, "phone vibrate",
Toast.LENGTH_SHORT).show();
vibrator.vibrate(2000);
return super.onTouchEvent(event);
}
}
另外,需要授权:
<uses-permission android:name=“android.permission.VIBRATE”/>
手机闹钟 AlarmManager
AlarmManager通常用途即为开发手机闹钟,但实际上它的作用不止于此,它的本质是一个全局定时器,AlarmManager可在指定时间或指定周期启动其他组件(包括Activity、Service、Broadcast)
Android应用也是通过Context的getSystemService()方法来获取AlarmManager对象,有如下方法
- set(int type, long triggerAtTime, PendingIntent operation):设置在triggerAtTime时间启动有operation参数指定的组件。其中第一个参数指定定时服务类型,可接受如下值
-
- ELAPSED_REALTIME:从现在开始时间过了一定时间后启动operation所对应的组件
- ELAPSED_REALTIME_WAKEUP:指定中现在开始过了一定时间后启动operation所对应的组件。即使系统关机也会执行operation所对应的组件
- RTC指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件
- RTC_WAKEUP:即使关机也会执行
- setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation):设置一个非常精确的周期性任务
- setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation):设计一个周期性执行的定时服务
- cancel(PendingIntent operation):取消AlarmManager的定时服务
示例代码:
public
class
AlarmTest
extends
ActionBarActivity
{
Button setTime;
AlarmManager aManager;
Calendar currentTime = Calendar.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTime = (Button) findViewById(R.id.setTime);
aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
setTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
Calendar currentTime = Calendar.getInstance();
new TimePickerDialog(AlarmTest.this, 0,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker tp, int hourOfDay,
int minute) {
// TODO Auto-generated method stub
Intent intent = new Intent(AlarmTest.this,
AlarmActivity.class);
PendingIntent pi = PendingIntent.getActivity(
AlarmTest.this, 0, intent, 0);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR, hourOfDay);
c.set(Calendar.MINUTE, minute);
aManager.set(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), pi);
Toast.makeText(AlarmTest.this,
"alarm set up ok", Toast.LENGTH_SHORT)
.show();
}
}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime
.get(Calendar.MINUTE), false).show();
}
});
Button setTime;
AlarmManager aManager;
Calendar currentTime = Calendar.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTime = (Button) findViewById(R.id.setTime);
aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
setTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
Calendar currentTime = Calendar.getInstance();
new TimePickerDialog(AlarmTest.this, 0,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker tp, int hourOfDay,
int minute) {
// TODO Auto-generated method stub
Intent intent = new Intent(AlarmTest.this,
AlarmActivity.class);
PendingIntent pi = PendingIntent.getActivity(
AlarmTest.this, 0, intent, 0);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR, hourOfDay);
c.set(Calendar.MINUTE, minute);
aManager.set(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), pi);
Toast.makeText(AlarmTest.this,
"alarm set up ok", Toast.LENGTH_SHORT)
.show();
}
}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime
.get(Calendar.MINUTE), false).show();
}
});
}
}
AlarmActivity代码
public
class
AlarmActivity
extends
Activity
{
MediaPlayer alarmMusic;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
alarmMusic = MediaPlayer.create(this, R.raw.alarm);
alarmMusic.setLooping(true);
alarmMusic.start();
new AlertDialog.Builder(AlarmActivity.this).setTitle("alarm")
.setMessage("alarm ring, go, go")
.setPositiveButton("sure", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which)
{
alarmMusic.stop();
AlarmActivity.this.finish();
}
}).show();
}
MediaPlayer alarmMusic;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
alarmMusic = MediaPlayer.create(this, R.raw.alarm);
alarmMusic.setLooping(true);
alarmMusic.start();
new AlertDialog.Builder(AlarmActivity.this).setTitle("alarm")
.setMessage("alarm ring, go, go")
.setPositiveButton("sure", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which)
{
alarmMusic.stop();
AlarmActivity.this.finish();
}
}).show();
}
}
定时更换壁纸的API为WallpaperManager,它提供了clear()方法来清除壁纸,还提供了如下方法来设置壁纸
- setBitmap(Bitmap bitmap)
- setResource(int resid)
- setStream(InputStream data)
示例代码
public
class
AlarmChangeWallpaper
extends
ActionBarActivity
{
AlarmManager aManager;
Button start,stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
Intent intent = new Intent(AlarmChangeWallpaper.this
,ChangeService.class);
final PendingIntent pi = PendingIntent.getService(
AlarmChangeWallpaper.this, 0 ,intent, 0);
start.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
aManager.setRepeating(AlarmManager.RTC_WAKEUP
, 0, 5000, pi);
start.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(AlarmChangeWallpaper.this
, "changeWallpaper ok", Toast.LENGTH_SHORT).show();
}
});
stop.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
start.setEnabled(true);
stop.setEnabled(false);
aManager.cancel(pi);
}
});
AlarmManager aManager;
Button start,stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
Intent intent = new Intent(AlarmChangeWallpaper.this
,ChangeService.class);
final PendingIntent pi = PendingIntent.getService(
AlarmChangeWallpaper.this, 0 ,intent, 0);
start.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
aManager.setRepeating(AlarmManager.RTC_WAKEUP
, 0, 5000, pi);
start.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(AlarmChangeWallpaper.this
, "changeWallpaper ok", Toast.LENGTH_SHORT).show();
}
});
stop.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
start.setEnabled(true);
stop.setEnabled(false);
aManager.cancel(pi);
}
});
}
}
ChangeService代码
public
class
ChangeService
extends
Service{
int[] wallpapers = new int[]{
R.drawable.shuangta,
R.drawable.lijiang,
R.drawable.qiao,
R.drawable.shui
};
WallpaperManager wManager;
int current = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
if (current >= 4)
current = 0;
try{
wManager.setResource(wallpapers[current++]);
}catch(Exception e){
e.printStackTrace();
}
return START_STICKY;
}
@Override
public void onCreate()
{
super.onCreate();
wManager = WallpaperManager.getInstance(this);
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
int[] wallpapers = new int[]{
R.drawable.shuangta,
R.drawable.lijiang,
R.drawable.qiao,
R.drawable.shui
};
WallpaperManager wManager;
int current = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
if (current >= 4)
current = 0;
try{
wManager.setResource(wallpapers[current++]);
}catch(Exception e){
e.printStackTrace();
}
return START_STICKY;
}
@Override
public void onCreate()
{
super.onCreate();
wManager = WallpaperManager.getInstance(this);
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
修改壁纸需要授予权限
<uses-permision android:name=“android.permission.SET_WALLPAPER”/>