009android初级篇之APP中使用系统相机相册等集成应用
android应用中使用相机功能,大致有两种方式实现:
- 直接调用系统内部的相机程序,显示的也是系统预设的界面(简单,只有简单的拍照功能);
- 自己去implement一个相机程序(不难,较具备弹性,但相对复杂);
权限
如果需要拍照功能,则需要在AndroidManifest.xml文件中添加权限:
调用系统相机应用
这是第一种方式
在启动相机前先指定好图片的文件位置,通知intent,同时也保留在成员变量中。然后在函数中,可以直接打开该文件
private static final int CAMERA_REQUESTCODE=1;
String sFileFullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.jpg";
Log.e("onNavi","file: "+sFileFullPath);
File file = new File(sFileFullPath);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, CAMERA_REQUESTCODE);
获取返回值
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUESTCODE) {
if (resultCode == RESULT_OK) {
////Bitmap bmPhoto = (Bitmap) data.getExtras().get("data");
// You can set bitmap to ImageView here 这里可以获得相片的缩略图
}
}
}
第二种方式:自定制camera
参考链接, 该功能我未实现
Android 自定义camera
同样的方法可以调用系统相册
private static final int REQUESTCODE_PICK=2;
Intent mIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(mIntent,REQUESTCODE_PICK);
在onActivityResult中获得选择的图片
if(requestCode == REQUESTCODE_PICK) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
Log.e(TAG,"Select image "+picturePath);
}
Intent常用的ACTION
1. Intent.Action_CALL
android.intent.action.CALL
呼叫指定的电话号码。
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086");
startActivity(intent);
2.Intent.Action.DIAL
String: action.intent.action.DIAL
调用拨号面板
Intent intent=new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086");
startActivity(intent);
3.Intent.Action.ALL_APPS
String: andriod.intent.action.ALL_APPS
列出所有的应用。
4. Intent.ACTION_CALL_PRIVILEGED
String:android.intent.action.CALL_PRIVILEGED
调用skype的action
Intent intent = newIntent("android.intent.action.CALL_PRIVILEGED");
intent.setClassName("com.skype.raider",
"com.skype.raider.Main");
intent.setData(Uri.parse("tel:" + phone));
startActivity(intent);
5. Intent.Action_CALL_BUTTON
String: android.action.intent.CALL_BUTTON.
相当于按“拨号”键。
Intent intent = new Intent(Intent.ACTION_CALL_BUTTON);
startActivity(intent);
6. Telephony.SMS_RECEIVED
String: android.provider.Telephony.SMS_RECEIVED
接收短信的action
7. Intent.ACTION_GET_CONTENT
String: android.intent.action.GET_CONTENT
允许用户选择特殊种类的数据,并返回(特殊种类的数据:照一张相片或录一段音)
8. Intent.ACTION_BATTERY_LOW;
String: android.intent.action.BATTERY_LOW
表示电池电量低
9. Intent.ACTION_SEND
String: android.intent.action.Send
发送邮件的action
10. Intent.ACTION_CLOSE_SYSTEM_DIALOGS
当屏幕超时进行锁屏时,当用户按下电源按钮,长按或短按(不管有没跳出话框),进行锁屏时,android系统都会广播此Action消息
11. Intent.ACTION_MAIN
String: android.intent.action.MAIN
标识Activity为一个程序的开始。
12. Intent.ACTION_POWER_CONNECTED;
插上外部电源时发出的广播
13 Intent.ACTION_POWER_DISCONNECTED;
已断开外部电源连接时发出的广播
14.Intent.ACTION_ANSWER
Stirng:android.intent.action.ANSWER
处理呼入的电话。
15 .Intent.ACTION_BUG_REPORT
String: android.intent.action.BUG_REPORT
显示Dug报告。
16. android.intent.action.MAIN
决定应用程序最先启动的Activity
17.android.intent.category.LAUNCHER
决定应用程序是否显示在程序列表里
如果只有一个activity的应用程序只声明了 android.intent.action.MAIN ,没有声明 android.intent.category.LAUNCHER,eclipse运行是将报错,桌面也不会有图标。
如果存在多个activity都声明了android.intent.action.MAIN与android.intent.category.LAUNCHER。将会有多个图标在桌面上。
action的操作有很多,需要的话,继续百度。
参考链接
Android 如何从系统图库中选择图片