Android项目笔记整理(1)
生活随笔
收集整理的這篇文章主要介紹了
Android项目笔记整理(1)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第二部分 工作項目中以及平時看視頻、看書或者看博客時整理的個人覺得挺有用的筆記
?
1.Activity界面切換:?
??if(條件1){?
? ? ? ?setContentView(R.layout.main);?
? }else{?
? ? ? ?setContentView(R.layout.other);?
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與響應(yīng)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.發(fā)送廣播Broadcast?
MainActivity中的核心代碼如下:?
????protected ?void ?onCreate(Bundle ?savedInstanceState){?
????啟動服務(wù): Intent ? intent=new ?Intent(MainActivity.this,MyService.class);?
? ? ??????????? ? ? intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);?
???????????????? ? ?startService(intent);??
????停止服務(wù): 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){?
????????新建個線程,用來處理服務(wù);?
????創(chuàng)建意圖:Intent ?intent=new ?Intent(FLAG);?
? ? ????????????? ? ? intent.putExtra("msg",MSG);?
? ? ??發(fā)送廣播: 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){?
???? 為相應(yīng)的組件注冊上下文菜單:?
???? 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.發(fā)送Email?
MainActivity中的核心代碼:?
????private Cursor ?cursor;?
????private ContactsAdapter ?myCa;?
????static final String[] PEOPLE_PROJECTION={?
???????? Contacts.People._ID,//聯(lián)系人的id?
???????? Contacts.People.PRIMARY_PHONE_ID,//電話id?
???????? Contacts.People.TYPE,?
???????? Contacts.People.NUMBER,//號碼?
???????? Contacts.People.LABEL,//標簽?
???????? Contacts.People.NAME?
????};?
????protected void onCreate(Bundle savedInstanceState){?
獲取內(nèi)容解析: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);?
?????????? 獲得聯(lián)系人的電話:? 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);?
????}?
需要添加權(quán)限 ?<uses-permission android:name="android.permission.READ_CONTACTS"/>?
8.當電話打進來時監(jiān)聽電話狀態(tài)并回復(fù)短信消息?
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){?
監(jiān)聽電話狀態(tài):myPhoneStateListener ?mPSL=new myPhoneStateListener();?
???????????????? ?? ?TelephonyManager tm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);?
???????????????? ?? ?tm.listen(mPSL,PhoneStateListener.LISTEN_CALL_STATE);?
????????????}?
內(nèi)部類: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.發(fā)送短信息?
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);//設(shè)置菜單圖標
? ? 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.設(shè)置手機情景模式
獲得震動服務(wù): Vibrator vibrator=(Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);
? ? ? ?開啟震動: vibrator.vibrate(new long[]{100,10,100,1000},0);
? ? ? ?取消震動: vibrator.cancel();
設(shè)置情景模式: AudioManager ?audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
?設(shè)置靜音: ? ? ?audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
設(shè)置音量:?? ?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();
需要加上操作權(quán)限
? ? <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:
設(shè)置對話框界面: 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總?cè)萘? 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]);
? ? ? ? ? ? ? ?? ? ??}
獲取發(fā)信人的手機號: String numComing=sm[i].getDiplayOriginatingAddress(); 獲取短消息內(nèi)容:? String smsBody=sm[i].getMessageBody(); ? ? ? ?????} ?
? ? ?}
}
?
19.查看運行的進程數(shù)量
更新ListView的數(shù)據(jù)信息:? 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){
?????????無法區(qū)分橫豎屏;
? ? }else if(getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
?????????橫屏;
? ? }else if(getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_PORTARIT){
?????????豎屏;
? ? }
設(shè)置豎屏: MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 設(shè)置橫屏: MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
public void onConfigurationChanged(Configuration config){
????if(config.orientation==Configuration.ORIENTATION_LANDSCAPE){
?????????處理橫屏事務(wù);
? ? ?}else if(config.orientation==Configuration.ORIENTATION_PORTRAIT){
????????? 處理豎屏事務(wù);
? ? ?}
}
?
21.讀取SDcard中的文件內(nèi)容
? ? 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.傳感器應(yīng)用
獲取傳感器服務(wù): SensorManager sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE); 獲取音頻管理服務(wù):
? ? 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:
??????????????震動模式;
? ? }
傳感器監(jiān)聽: 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];
設(shè)置響鈴模式: ???????? ?? ?am.setRingerMode(AudioManager.RINGER_MODE_NORMAL); ? ? ??}
???? public void onAccuracyChanged(int sensor,int accuracy){ } } 注冊傳感器監(jiān)聽:
protected void onResume(){
? ? ?super.onResume();
? ? ?sm.registerListener(mySensorListener,SensorManager.SENSOR_ORIENTATION?,?SensorManager.SENSOR_DELAY_NORMAL);
}
取消傳感器監(jiān)聽:
protected void onPause(){
????super.onPause();
????sm.unregisterListener(mySensorListener);
}
? 23.進度條調(diào)節(jié)音量
獲取音頻服務(wù): 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添加回調(diào)事件:
? ? ? ? ??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.檢測網(wǎng)絡(luò)是否連通
ConnectionDetector中的核心代碼:
private Context ?_context;
public boolean isConnectingToInternet(){
獲得連通性服務(wù): 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.采集圖像數(shù)據(jù)
protected void onCreate(Bundle savedInstanceState){
設(shè)置橫屏: 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){
停止預(yù)覽: myCamera.stopPreview(); 釋放照相機資源: ???? ??myCamera.release(); 釋放對象資源: ???????myCamera=null; } } public void initCamera() throws IOException{
? ? ?if(myCamera==null&&!isView){
??????????myCamera=Camera.open();
? ? ?}
? ? ?if(myCamera!=null&&!isView){
?????????try{
獲取照相機參數(shù): Camera.Parameters ?myParameters=myCamera.getParameters(); 設(shè)置參數(shù): ? ? myParameters.setPictureFormat(PixelFormat.JPEG); ????????????? ? myCamera.setParameters(myParameters);
開啟照相機預(yù)覽: 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.發(fā)送短信
? ? 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();}
???????????????????}
? ? ?????}
}
??
轉(zhuǎn)載于:https://www.cnblogs.com/evilKing/p/4418167.html
總結(jié)
以上是生活随笔為你收集整理的Android项目笔记整理(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF技术触屏上的应用系列(三): 视
- 下一篇: 面试题系列——OSI七层模型