相机,闹铃,铃声

(written in 2012-08-01 01:34:37


Camera

常用API

autoFocus

设置自动对焦

getParameters

得到相机的参数

open

启动相机服务

release

释放相机服务

setParameters

设置预览的参数

setPreviewDisplay

设置预览

startPreview

设置预览

stopPreview

停止预览

takePicture

拍照

 

例:

public class Activity01 extends Activity{
//自定义的视图类,预览照片
private Preview mPreview;
 
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
 
//创建预览视图并且设置它作为Activity要显示的内容
mPreview = new Preview(this);
setContentView(mPreview);
}
 
public boolean onKeyUp(int KeyCode,KeyEvent event){
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_CENTER:
mPreview.takePicture();
break;
}
return true;
}
}
 
//显示Preview
public Preview extends SurfaceView implements SurfaceHolder.Callback{
SurfaceHolder mHolder;
Camera camera;
Bitmap cameraBitmap;
 
Preview(Context context){
super(context);
 
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
 
//SurfaceView创时触发
public void surfaceCreated(SurfaceHolder holder){
mCamera = Camera.open();
try{
mCamera.setPreviewDisplay(holder);
}catch(IOException e){
mCamera.release();
mCamerea = null;
}
}
 
public void surfaceDestroyed(SurfaceHolder holder){
//停止预览
mCamera.stopPreview();
mCamere = null;
}
 
public void surfaceChanged(SurfaceHolder holder,int format,int w,int h){
//构建Camera.Parameters对相机的参数进行设置
Camera.Parameters parameters = mCamera.getParameters();
//设置拍照的股票格式
parameters.setPictureFormat(PixelFormat.JPEG);
//设置Preview的尺寸
parameters.setPreviewSize(320,480);
//设置图像分辨率
parameters.setPictureSize(320,480);
//设置相机采用parameters
mCamera.setParameters(parameters);
//开始预览
mCamera.startPreview();
}
 
//拍照
public void takePicture(){
if(mCamera != null){
mCamera.tackPicture(null,null,jpegCallback);
}
}
 
//拍照后输出图片
private PictureCallback jpegCallback = new PictureCallback(){
public void onPictureTaken(byte[] _data,Camera _camera){
cameraBitmap = BitmapFactory.decodeByteArray(_data,0,_data.length);
File myCaptureFile = new File("/sdcard/cameral.jpg");
try{
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFIle));
CameraBitmap.compress(Bitmap.CompressFormat.JEPG,80,bos);
bos.flush();
bos.close();
//将拍到的图片绘制出来
Canvas canvas = mHolder.lockCanvas();
canvas.drawBitmap(CameraBitmap,0,0,null);
mHolder.unlockCanvasAndPost(canvas);
 
}catch(){
e.getMessage();
}
}
};
}
 


 

闹铃

AlarmManager

常用API

cancel

取消AlarmManager服务

set

设置AlarmManager服务

setInexactRepeating

设置不精确周期

setRepeating

设置精确周期

setTimeZone

设置时区

例:

public class AlarmReceiver extends BroadcastReceiver{
public void onReceive(Context context,Intent intent){
Task.makeText(context,"你设置的时间到了!",Toast.LENGTH_LONG).show();
}
}


AndroidManifest.xml

<Receiver android:name=".AlarmReceiver"
android:process=":remote"/>


 

public class Activity01 extends Activity{
Button mButton1;
Button mButton2;
TextView mTextView;
Calendar calendar;
 
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
calendar = Calendar.getInstance();
mTextView = (TextView)findViewById(R.id.TextView01);
mButton1 = (Button)findViewById(R.id.Button01);
mButton2 = (Button)findViewById(R.id.Button02);
 
mButton1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
calendar.setTimeInMillis(System.currentTimeMillis());
int mHour = calendar.get(Calendar.HOUR_OF_DAY);
int mMinute = calendar.get(Calendar.MINUTE);
new TimePickerDialog.OnTimeSetListener(){
public void onTimeSet(TimePicker view,int hourOfDay,int minute){
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
calendar.set(Calendar.MINUTE,minute);
calendar.set(Calendar.SECONDE,0);
calendar.set(Calendar.MILLISECOND,0);
 
//建立Intent和PendingIntent来调用目标组件
Intent intent = new Intent(Activity01.this,AlarmReceiver.class);
PendingIntent pendingInpent = PendingIntent.getBroadcast(Activity01.this,0,intent,0);
AlarmManager am;
//获取闹铃管理的实力
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//设置闹铃
am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
//设置周期闹铃
am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+(10*1000),(24*60*60*1000),pendingIntent);
String tmpS = "设置闹铃时间为"+format(hourOfDay)+":"+format(minute);
mTextView.setText(tmpS);
}
},mHour,mMinute,true).show();
}
});
 
mButton2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(Activity01.this,AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Activity01.this,0,intent,0);
AlarmManager am;
//获取闹铃管理器
am = (AlarmManager)getSystmenService(ALARM_SERVICE);
//取消
am.cancel(pendingIntent);
mTextView.setText("闹铃已经取消");
}
});
}
 
//格式化字符串,显示时间
private String format(int x){
 
String s = ""+x;
if(s.length == 1){
s = "0"+s;
}
return s;
}
}
 


 

铃声

SDcard目录(也可能是/sdcard/music下):

/sdcard/ringtones

一般的铃声

TYPE_RINGTONE

/sdcard/alarms

闹钟铃声

TYPE_ALARM

/sdcard/notifications

警告或通知铃声

TYPE_NOTIFICATION

 

RingtoneManager

常用API

getActualDefaultRingtoneUri

取得指定类型当前默认的铃声

getCursor

返回所有可用铃声的游标

getDefaultType

得到指定URI默认的铃声类型

getDefaultUri

返回指定类型的默认铃声的URI

getRingtone

获得当前游标所指定的铃声

getRingtonePosition

得到我们指定铃声的位置

getRingtoneUri

获得指定位置铃声的URI

getValidRingtoneUri

得到一个可用的URI

isDefault

得到指定的URI是否为默认的铃声

setActualDefaultRingtoneUri

设置默认的铃声

例:

public class Activity01 extends Activity{
private Button mButtonRingtone;
private Button mButtonAlarm;
private Button mButtonNotification;
 
//自定义类型
public static final int ButtonRingtone = 0;
public static final int ButtonAlarm = 1;
public static final int ButtonNotification = 2;
 
//铃声文件夹
private String strRingtoneFolder = "/sdcard/music/ringtone";
private String strAlarmFolder = "/sdcard/music/alarms";
private String strNotificationFolder = "/sdcard/music/notifications";
 
public void onCreate(Bundler savedInstanceState){
super.onCreate(savedInstanceStae);
setContentView(R.layout.main);
 
mButtonRingtone = (Button)findViewById(R.id.ButtonRingtone);
mButtonAlarm = (Button)findViewById(R.id.ButtonAlarm);
mButtonNotification = (Button)findViewById(R.id.ButtonNotification);
 
//设置铃声
mButtonRingtone.setOnClickListener(new Button.onClickListener(){
public void onClick(View v){
if(bFolder(strRingtoneFolder){
//打开系统铃声设置
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
//类型为来电ringtone
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_RINGTONE);
//设置显示的title
intent.putExtra(RingtoneManger.EXTRA_RINGTONE_TITLE,"设置来电铃声");
//当设置完成之后返回到当前的Activity
startActivityForResult(intent,ButtonRingtone);
}
}
});
 
//设置闹钟铃声
mButtonAlarm.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(bFolder(strAlarmFolder){
 
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
//设置铃声类型和title
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,"设置闹铃铃声");
startActivityForResult(intent,ButtonAlarm);
}
}
});
 
//设置通知铃声
mButtonNotification.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(bFolder(strNotificationFolder){
//打开系统铃声设置
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
//设置铃声类型和title
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE);
Iintent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,"设置通知铃声");
startActivityForResult(intent,startActivityForResult(intent,ButtonNotification);
}
}
});
 
}
 
//当设置铃声后的回调函数
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(resultCode != RESULT_OK){
return;
}
switch(requestCode){
case ButtonRingtone:
case ButtonRingtone:
try{
//得到选择的铃声
Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKER_URI);
//将选择的铃声设置为默认铃声
if(pickedUri != null){
RingtoneManager.setActualDefaultRingtoneUri(Activity01.this,RingtoneManager.TYPE_RINGTONE,pickedUri);
}
}catch(Exception e){
 
}
break;
case ButtonAlarm:
try{
//得到选择的铃声
Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
//将选择的铃声设置为默认铃声
if(pikcedUri != null){
RingtoneManager.setActualDefaultRingtoneUri(Activity01.this,RingtoneManager.TYPE_ALARM,pickedUri);
}
}catch(Exception e){
 
}
break;
case BauttonNotification:
try{
//得到选择的铃声
Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
//将选择的闹铃设置为默认闹铃
if(picked != null){
RingtoneManager.setActualDefaulRingtoneUri(Activity01.this,RingtoneManager.TYPE_NOTIFICATION,pickedUri);
}
}catch(Exception e){
 
}
break;
}
super.onActivityResult(requestCode,resultCode,data);
}
 
//如果不存在则创建
private boolean bFolder(String strFolder){
boolean btmp  = false;
File f = new File(strFolder);
if(!f.exists()){
if(f.mkdirs()){
btmp = true;
}else{
btmp = false;
}
}else{
btm = true;
}
return btmp;
}
}


 

添加权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值