2.带有返回的Activity消息传递:
MainActivity中核心代码如下:
Button.setOnClickListener(listener);
View.OnClickListener listener=new OnClickListener(){
Public void onClick(View v){
String msg=EditText.getText().toString().trim();
Intent intent=new Intent();
intent.setClass(MainActivity.this,OtherActivity.class);
Bundle bundle=new Bundle();
bundle.putString(“msg”,msg);
intent.putExtras(bundle);
startActivityForResult(intent , requestCode);
}
}
Public void onActivityResult(int requestCode,int resultCode, Intent data){
switch(条件:判断请求Code与响应Code){
case 判别选项:
Bundle bundle=data.getExtras();
String msg=bundle.getString(“msg”);
处理得到的msg;
}
}
OtherActivity中的核心代码:
Bundle bundle=this.getIntent().getExtras();
String msg=bundle.getString(“msg”);
处理msg;
button.setOnClickListener(new View.OnClickListener(
public void onClick(View v){
OtherActivity.this.setResult(resultCode ,OtherActivity.this.getIntent());
}
));
3.发送广播Broadcast
MainActivity中的核心代码如下:
protected void onCreate(Bundle savedInstanceState){
启动服务: Intent intent=new Intent(MainActivity.this,MyService.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
停止服务: Intent intent=new Intent(MainActivity.this,MyService.class);
boolean isYes = stopService(intent);
}
public void onResume(){
super.onResume();
注册广播:IntentFilter intentFilter=new IntentFilter(MyService.FLAG);
MyBroadcastReceiver mReceiver=new MyBroadcastReceiver();
registerReceiver(mReceiver,intentFilter);
}
public void onPause(){
super.onPause();
取消广播:MyBroadcastReceiver mReceiver=new MyBroadcastReceiver();
unregisterReceiver(mReceiver);
}
MyService中的核心代码:
public int onStartCommand(Intent intent,int flags,int startId){
新建个线程,用来处理服务;
创建意图:Intent intent=new Intent(FLAG);
intent.putExtra("msg",MSG);
发送广播: sendBroadcast(i);
}
public void onDestroy(){
flag=false;
super.onDestroy();
}
MyBroadcastReceiver中的核心代码:
public void onReceive(Context context,Intent intent){
Bundle bundle=intent.getExtras();
String msg=bundle.getString("msg");
处理msg;
}
4.利用广播查看手机电量
MainActivity中的核心代码:
int level;//当前电量值
int scale;//总的电量值
Handler hd=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
处理消息;
}
}
}
BroadcastReceiver br=new BroadcastReceiver(){
public void onReceive(Context context,Intent intent){
String s=intent.getAction();
if(Intent.ACTION_BATTERY_CHANGED.equals(s)){
level=intent.getIntExtra("level",0);
scale=intent.getIntExtra("scale",100);
hd.sendEmptyMessage(0);
}
}
};
public void onCreate(Bundle savedInstanceState){
注册广播:MainActivity.this.registerReceiver(br,new IntentFilter(Intent.ACTIVITY_BATTERY_CHANGED));
}
5.使用上下文菜单
public void onCreate(Bundle savedInstanceState){
为相应的组件注册上下文菜单:
this.registerForContextMenu(findViewById(R.id.EditText01));
}
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){
menu.add(组号,菜单号,顺序号,R.string.title);
}
public boolean onContextItemSelected(MenuItem mi){
switch(mi.getItemId()){
case MENU1:
case MENU2:
处理菜单选中事件;
break;
}
}
6.添加链接事件
Linkify.addLinks(TextView,Linkify.WEB_URLS|Linkfy.EMAIL_ADDRESSED|Linkify.PHONE_NUMBERS);
7.发送Email
MainActivity中的核心代码:
private Cursor cursor;
private ContactsAdapter myCa;
static final String[] PEOPLE_PROJECTION={
Contacts.People._ID,//联系人的id
Contacts.People.PRIMARY_PHONE_ID,//电话id
Contacts.People.TYPE,
Contacts.People.NUMBER,//号码
Contacts.People.LABEL,//标签
Contacts.People.NAME
};
protected void onCreate(Bundle savedInstanceState){
获取内容解析:ContentResolver content=getContentResolver();
cursor=content.query(Contacts.People.CONTENT_URI,PEOPLE_PROJECTION,
null,null,Contacts.People.DEFAULT_SORT_ORDER);
myCa=new ContactsAdapter(this,cursor);
autoCompleteTextView.setAdapter(myCa);
autoCompleteTextView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Cursor c=myCa.getCursor();
c.moveToPosition(position);
获得联系人的电话: String number=c.getString(c.getColumnIndexOrThrow(Contacts.People.Number));
});
}
ContactsAdapter中的核心代码:
ContentResolver myCr;
public ContentResolver(Context context,Cursor c){
myCr=context.getContentResolver();
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final LayoutInflater myLi=LayoutInflater.from(context);
final TextView tv=(TextView)myLi.inflate(android.R.layout.simple_dropdown_item_1line, parent,false);
tv.setText(cursor.getColumnIndexOrThrow(Contacts.People.NAME));
return tv;
}
public void bindView(View view, Context context, Cursor cursor) {
((TextView)view).setText(cursor.getString(cursor.getColumnIndexOrThrow(Contacts.People.NAME)));
}
public CharSequence convertToString(Cursor cursor) {
String str=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.People.NAME));
return str;
}
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
if(getFilterQueryProvider()!=null)
return getFilterQueryProvider().runQuery(constraint);
StringBuilder sb=new StringBuilder();
String[] str=null;
if(constraint!=null){
sb.append("UPPER(");
sb.append(Contacts.People.NAME);
sb.append(") GLOB ?");
str=new String[]{constraint.toString().toUpperCase()+"*"};
}
return myCr.query(Contacts.People.CONTENT_URI, MainActivity.PEOPLE_PROJECTION,sb==null?null:sb.toString(), str, Contacts.People.DEFAULT_SORT_ORDER);
}
需要添加权限 <uses-permission android:name="android.permission.READ_CONTACTS"/>
8.当电话打进来时监听电话状态并回复短信消息
MainActivity中的核心代码:
Handler hd=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 0:
Bundle b=msg.getData();
String incomingNumber=(String)b.get("number");
SmsManager smsManager=SmsManager.getDefault();
PendingIntent pi=PendingIntent.getBroadcaset(context,0,new Intent(),0);
smsManager.sendTextMessage(incomingNumber,null,msg,pi,null);
}
}
}
protected void onCreate(Bundle savedInstance){
监听电话状态:myPhoneStateListener mPSL=new myPhoneStateListener();
TelephonyManager tm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(mPSL,PhoneStateListener.LISTEN_CALL_STATE);
}
内部类:public class myPhoneStateListener extends PhoneStateListener{
public void onCallStateChanged(int state,String incomingNumber){
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Bundle bundle=new Bundle();
bundle.putString("number",incomingNumber);
Message m=new Message();
m.what=1;
m.setData(bundle);
hd.sendMessage(m);
}
}
}
9.利用绝对布局移动图片框
MainActivity中的核心代码:
DisplayMetrics dm=new DisplayMetrics();
getWindowManger().getDefaultDisplay().getMetrix(dm);
int screenHeight=dm.heightPixels;
int screenWidth=dm.widthPixels;
ImageView.setLayoutParams(new AbsoluteLayout.LayoutParams(Image_Width,Image_Height,Image_X,Image_Y));
10.发送短信息
MainActivity中的核心代码:
判断是否为合法电话号码,返回boolean:
PhoneNumberUtils.isGlobalPhoneNumber(numberStr);
PendingIntent pi=PendingIntent.getActivity(this,0,new Intent(this,MainActivity.class),0);
SmsManager sms=SmsManager.getDefault();
sms.sendTextMessage(phoneNumber,null,smsBody,pi,null);
11.代码中添加选项菜单
MainActivity中的代码如下:
public boolean onCreateOptionMenu(Menu menu){
SubMenu subMenuGender=menu.addSubMenu(上一级菜单ID,子菜单项ID,子菜单排序序号,子菜单标题);
subMenuGender.setIcon(R.drawable.gender);//设置菜单图标
MenuItem male = subMenuGender.add(菜单组号,子菜单号,序号,标题);
male.setChecked(true); //子菜单被选中
OnMenuItemClickListener lsn=new OnMenuItemClickListener(){
public boolean onMenuItemClick(MenuItem item){
子菜单项单击事件;
}
}
}
public boolean onOptionsItemSelected(MenuItem mi){
int id=mi.getItemId();
被选中事件;
}
?
12.打电话
获取电话号码:String number=EditText.getText().toString().trim();
判断是否为合法电话号码;
打电话:Intent intent=new Intent("android.intent.action.CALL",Uri.parse("tel://"+number));
startActivity(intent);
?
13.设置手机情景模式
获得震动服务: Vibrator vibrator=(Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);
开启震动:
vibrator.vibrate(new long[]{100,10,100,1000},0);
取消震动: vibrator.cancel();
设置情景模式: AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
设置静音: audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
设置音量: audioManager.getStreamVolume(AudioManager.STREAM_RING);
?
14.访问APK中的资源文件
String result=null;
try{
InputStream in=this.getResources().getAssets().open(fileName);
int ch=0;
ByteArrayOutputStream baos=new ByteArrayOutputSream();
while((ch=in.read())!=-1){
baos.write(ch);
}
byte[] buff=baos.toByteArray();
baos.close();
in.close();
result=new String(buff,"GB2312");
result=result.replaceAll("\\r\\n","\n");
}catch(Exception e){
Toast.makeText(this,"对不起,没有找到指定文件",Toast.LENGTH_SHORT).show();
}
?
15.SDcard中文件操作
File rootFile=new File("/sdcard");
File[] files=rootFile.listFiles();
file.delete();
file.isDestory();
file.length();
file.getName();
需要加上操作权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
?
16.修改SDcard中文件的名字
MainActivity中的核心代码:
public Dialog onCreateDialog(int id){
Dialog result=null;
switch(id){
case 0:
AlertDialog.Builder b=new AlerDialog.Builder(this);
b.setItems(null,null);
b.setCancelable(false);
gmDialog=b.create();
result=gmDialog;
}
return result;
}
public void onPrepareDialog(int id,final Dialog dialog){
switch(id){
case 0:
设置对话框界面:
dialog.setContentView(R.layout.dialog);
button.setOnClickListener(new ....{
String newName=et.getText().toString().trim();
File xgf=new File(leavePath);
String newPath=xgf.getParentFile().getPath()+"/"+newName;
重命名文件: xgf.renameTo(new File(newPath));
取消对话框: dialog.cancel();
})
}
}
?
17.读取SDcard的使用情况信息
判断SDcard是否装载:
装载:Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
未装载:Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)
获取存储根目录文件:
File path=Environment.getExternalStorageDirectory();
StatFs sf=new StatFs(path.getPath());
获取SDcard总容量:
long total=sf.getTotalBytes();
获取sdcard可用容量:
long available=sf.getFreeBytes();
String totalSize=total/1024>=1024?total/1024/1024+"MB":total/1024+"KB";
?
18.接收短信息
class MyReceiver extends BroadcastReceiver{
public void onReceive(Context context,Intent intent){
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle=intent.getExtras();
if(bundle!=null){
Object[] obj=(Object[])bundle.get("pdus");
SmsMessage[] sm=new SmsMessage[obj.length];
for(int i=0;i<obj.length();i++){
sm[i]=SmsMessage.createFromPdu((byte[])obj[i]);
}
获取发信人的手机号:
String numComing=sm[i].getDiplayOriginatingAddress();
获取短消息内容:
String smsBody=sm[i].getMessageBody();
}
}
}
?
19.查看运行的进程数量
更新ListView的数据信息:
listView.invalidateViews();
查看进程:
try{
ActivityManager am=(ActivityManager)MainActivity.this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list=am.getRunningTasks(20);
for(int i=0;i<list.size();i++){
进程信息:
listArray.add(i+"."+list.get(i).baseActivity.getClassName()+",ID="+list.get(i).id);
}
}
?
20.改变屏幕方向
获取屏幕方向:
if(getRequestedOrientation()==-1){
无法区分横竖屏;
}else if(getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
横屏;
}else if(getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_PORTARIT){
竖屏;
}
设置竖屏:
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
设置横屏:
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
public void onConfigurationChanged(Configuration config){
if(config.orientation==Configuration.ORIENTATION_LANDSCAPE){
处理横屏事务;
}else if(config.orientation==Configuration.ORIENTATION_PORTRAIT){
处理竖屏事务;
}
}
?
21.读取SDcard中的文件内容
String result=null;
try{
File f=new File("/sdcard"+fileName);
byte[] buff=new byte[(int)f.length];
FileInputStream fin=new FileInputStream(f);
fin.read(buff);
fin.close();
result=new String(buff,"GB2312");
result=result.replaceAll("\\r\\n","\\n");
}catch(Exception e){
异常处理;
}
?
22.传感器应用
获取传感器服务:
SensorManager sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
获取音频管理服务:
try{
AudioManager am=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
if(am!=null){
获取响铃模式:
int msg=am.getRingerMode();
}
}
switch(msg){
case AudioManager.RINGER_MODE_NORMAL:
正常模式;
case AudioManager.RINGER_MODE_SILENT:
静音模式;
case AudioManager.RINGER_MODE_VIBRATE:
震动模式;
}
传感器监听:
private SensorListener mySensorListener = new SensorListener(){
public void onSensorChanged(int sensor,float[] values){
float yaw=values[SensorManager.DATA_X];
float pitch=values[SensorManager.DATA_Y];
float row=values[SensorManager.DATA_Z];
设置响铃模式:
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
public void onAccuracyChanged(int sensor,int accuracy){ }
}
注册传感器监听:
protected void onResume(){
super.onResume();
sm.registerListener(mySensorListener,SensorManager.SENSOR_ORIENTATION , SensorManager.SENSOR_DELAY_NORMAL);
}
取消传感器监听:
protected void onPause(){
super.onPause();
sm.unregisterListener(mySensorListener);
}
?
23.进度条调节音量
获取音频服务:
AudioManager am=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
获取进度条:
final ProgressBar pb=(ProgressBar)this.findViewById(R.id.ProgressBar01);
获取当前音量:
int volume=am.getStreamVolume(AudioManager.STREAM_RING);
pb.setMax(70);
pb.setProgress(volume*10);
增加音量:
am.adjustVolume(AudioManager.ADJUST_RAISE,0);
volume=am.getStreamVolume(AudioManager.STREAM_RING);
pb.setProgress(volume*10);
减少音量:
am.adjustVolume(AudioManager.ADJUST_LOWER,0);
?
24.利用SurfaceView显示图像
public class MySurface extends SurfaceView implements SurfaceHolder.Callback{
MainActivity activity;
Paint paint;
public MySurfaceView(MainActivity activity){
super(activity);
this.activity=activity;
为SurfaceView添加回调事件:
this.getHolder().addCallback(this);
paint=new Paint();
paint.setAntiAlias(true);
}
public void draw(canvas){
绘制图像图形;
canvas.drawBitmap(bitmapTmp,0,0,paint);
}
public void surfaceCreated(SurfaceHolder holder){
Canvas canvas=holder.lockCanvas();
try{
synchronized(holder){
draw(canvas);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(canvas!=null){
holder.unlockCanvasAndPost(canvas);
}
}
}
.......................
}
?
25.检测网络是否连通
ConnectionDetector中的核心代码:
private Context _context;
public boolean isConnectingToInternet(){
获得连通性服务:
ConnectivityManager connectivity=(ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivity!=null){
NetworkInfo[] info=connectivity.getAllNetworkInfo();
if(info!=null)
for(int i=0;i<info.length;i++)
if(info[i].getState()==NetworkInfo.State.CONNECTED){
return true;
}
}
return false;
}
?26.采集图像数据
protected void onCreate(Bundle savedInstanceState){
设置横屏:
this.setRequestedOrientation(ActivitInfo.SCREEN_ORIENTATION_LANDSCAPE);
取消标题:
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
全屏:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
SurfaceView mySurfaceView=(SurfaceView)this.findViewById(R.id.surfaceView01);
SurfaceHolder mySurfaceHolder=mySurfaceView.getHolder();
mySurfaceHolder.addCallback(this);
mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
protected void onPause(){
super.onPause();
isView=false;
if(myCamera!=null){
停止预览:
myCamera.stopPreview();
释放照相机资源:
myCamera.release();
释放对象资源:
myCamera=null;
}
}
public void initCamera() throws IOException{
if(myCamera==null&&!isView){
myCamera=Camera.open();
}
if(myCamera!=null&&!isView){
try{
获取照相机参数:
Camera.Parameters myParameters=myCamera.getParameters();
设置参数:
myParameters.setPictureFormat(PixelFormat.JPEG);
myCamera.setParameters(myParameters);
开启照相机预览:
myCamera.startPreview();
isView=true;
}catch(Exception e){
e.printStackTrace();
}
}
}
照相:
ShutterCallback myShutterCallback=new ShutterCallback(){
public void onShutter(){}
}
PictureCallback myRawCallback=new PictureCallback(){
public void onPictureTaken(byte[] data,Camera camera){}
}
PictureCallback myjpegCallback=new PictureCallback(){
public void onPictureTaken(byte[] data,Camera camera){
bm=BitmapFactory.decodeByteArray(data,0,data.length);
ImageView myImageView=(ImageView)findViewById(R.id.mySurfaceView);
myImageView.setImageBitmap(bm);
isView=false;
myCamera.stopPreview();
myCamera.release();
myCamera=null;
}
}
if(isView&&myCamera!=null){
启动照相:
myCamera.takePicture(myShutterCallback,myRawCallback,myjpegCallback);
}
保存图像:
String path=Environment.getExternalStorageDirectory();
int c=0;
File fTest=new File(path+"/mc"+c+".jpeg");
while(fTest.exists()){
c++;
fTest=new File(path+"/mc"+c+".jpeg");
}
try{
FileOutputStream fout=new FileOutputStream(fTest);
BufferedOutputStream bos=new BufferedOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,80,bos);
bos.flush();
bos.close();
}catch(Exception e){
异常处理;
}
?
27.录制视频
开始录制:
MediaRecorder recorder=new MediaRecorder();
File outf=File.createTempFile("fileName" , ".mp4" , Environment.getExternalStorageDirectory());
recorder.setPreviewDisplay(mSurfaceHolder.getSurface());
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoSize(640,480);
recorder.setVideoFrameRate(20);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setMaxDuration(10000);
recorder.setOutputFile(outf.getAbsolutePath);
recorder.prepare();
recorder.start();
停止录制:
recorder.stop();
recorder.release();
recorder=null;
?28.录制音频
File myFile=File.createTempFile("myAudio",".amr",Environment.getExternalStorageDirectory());
MediaRecorder myMediaRecorder=new MediaRecorder();
myMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
myMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
myMediaRecorder.setOutputFile(myFile.getAbsolutePath());
myMediaRecorder.prepare();
myMediaRecorder.start();
?
29.获得手机中的图片
button.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent intent=new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,1);
}
});
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(resultCode==RESULT_OK){
获取选中图片uri:
Uri uri=data.getData();
ContentResolver cr=this.getContentResolver();
try{
获取图片保存在Bitmap对象中:
Bitmap bitmap=BitmapFactory.decodeStream(cr.openInputStream(uri));
ImageView imageView=(ImageView)findViewById(R.id.imageview);
imageView.setImageBitmap(bitmap);
}catch(Exception e){
e.printStackTrace();
}
}
super.onActivityResult(requestCode,resultCode,data);
}
?
30.发送短信
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
msg=et.getText().toString().trim();
Uri uri=Uri.parse("content://contacts/people");
Intent intent=new Intent(Intent.ACTION_PICK,uri);
startActivityForResult(intent,0);
}
});
public void onActivityResult(int requestCode,int resultCode,Intent intent){
switch(requestCode){
case 0:
Uri uri=intent.getData();
if(uri!=null){
try{
Cursor cursor=getContentResolver().query(ContactsContract.Contacts.CONTENET_URI,null,null,null,null);
while(cursor.moveToNext()){
String phoneName=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
获取用户的id,用来查找电话号码:
String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String hasPhone=cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(hasPhone.compareTo("1")==0){
Cursor phones=getContentResolver().query(ContactsContract.CommonDatakinds.Phone.CONTENT_URI,null
,ContactsContract.CommonDatakinds.Phone.CONTACT_ID+"="+contactId,null,null);
while(phones.moveToNext()){
String phoneNumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDatakinds.Phone.NUMBER));
String phoneType=phones.getString(phones.getColumnIndex(ContactsContract.CommonDatakinds.Phone.TYPE));
if(phoneType.equals("2")){
SmsManager smsManager=SmsManager.getDefault();
PendingIntent pi=PendingIntent.getBroadcast(MainActivity.this,0,new Intent(),0);
smsManager.sendTextMessage(phoneName,null,msg,pi,null);
}
}
phones.close();
}
}
}catch(Exception e){e.printStackTrace();}
}
}
}
?