今天一切还算OK吧,家里购置了一个网络机顶盒,回来测试一下,效果还不错,下午抽了点时间去给哥哥修电脑,原来
是由于哥哥的调皮儿子老是强制关机导致配置文件丢失,所以电脑崩溃,一开始没有进PE去安装系统,老是卡在一个很奇怪的界面,
最后进入PE之后,选择安装到C盘,问题解决,又Get了一项新技能!!!好了,下面开始说安卓的学习!!!
今天其实主要是通知部分的实战,代码难度有点高,其实也没要都懂,之所以全部敲出来是为了以后拿过来直接用。
一、使用通知
通知的使用:当某个应用程序希望向用户发出一些提示信息,而该 应用程序又不在前台运行,就可以借助通知实现。
发出一条通知以后,手机最上方的状态栏会显示一个通知的图标 下拉状态栏后会显示一个通知的图标
创建通知的一般步骤:
1.首先需要一个NotificationManager来对通知进行管理,
可以调用getSystemService()方法来获得。getSystemService()方法
接收一个字符串参数用于确定获取系统的那个服务。
2.创建一个Motification对象,这个对象用于存储通知所需的各种信息,
我们可以使用它的有参构造函数来进行创建
3.设定通知的布局
4.最后调用notify()方法将通知显示出来。
部分代码如下:
public class MainActivity extends ActionBarActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.send_notice);
// 发送通知的点击事件只能实现监听的接口
button.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.send_notice:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 状态栏显示的内容
Notification notification = new Notification(
R.drawable.ic_launcher, "This is ticker text",
System.currentTimeMillis());
// setLatestEventInfo是给通知设置一个标准布局
Intent intent = new Intent(this, NotificationActivity.class);
// getActivity是指去获取一个活动的意思,还有getBraodcast、getService
// 第四个参数用于确定pendingIntent的行为
/**
* FLAG_CANCEL_CURRENT:如果该PendingIntent已经存在,则在生成新的之前取消当前的。
* FLAG_NO_CREATE:如果该PendingIntent不存在,直接返回null而不是创建一个PendingIntent.
* FLAG_ONE_SHOT:该PendingIntent只能用一次,在send()方法执行后,自动取消。
* FLAG_UPDATE_CURRENT:如果该PendingIntent已经存在,则用新传入的Intent更新当前的数据。
*/
//构造意图构造延迟意图实例
PendingIntent pi = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
//将延迟意图写入布局
notification.setLatestEventInfo(this, "This is content title",
"This is content text", pi);
//设置消息的提示方式,这里采用默认的提示方式
notification.defaults=Notification.DEFAULT_ALL;
manager.notify(1, notification);
break;
default:
break;
}
}
}
最后不要忘记对通知进行取消,否则即使我们查看了通知,通知还会显示在状态栏,只有彻底销毁活动的时候,通知才会消失。
public class NotificationActivity extends Activity {
//为通知添加以下响应,即当我们点击通知时,显示一部分内容
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.notification_layout);
//取消通知,这样的话只要将通知点击开之后状态栏的标志就会自动消失,而不用等到从后台去销毁活动。
//NotificationManager对活动进行管理
NotificationManager notificationManager=(NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancel(1);
}
}
二、短信的收发项目
代码如下:
public class MainActivity extends ActionBarActivity {
private TextView sender;
private TextView content;
private EditText to;
private EditText msgInput;
private Button send;
private IntentFilter receiverFilter;
private MessageReceiver messageReceiver;
private IntentFilter sendFilter;
private SendStatusReceiver sendStatusReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sender=(TextView)findViewById(R.id.sender);
content=(TextView)findViewById(R.id.content);
//对接收短信广播进行动态注册
receiverFilter=new IntentFilter();
receiverFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
messageReceiver=new MessageReceiver();
registerReceiver(messageReceiver, receiverFilter);
//对接收短信发送情况进行广播进行注册
sendFilter=new IntentFilter();
sendFilter.addAction("SENT_SMS_ACTION");
sendStatusReceiver=new SendStatusReceiver();
registerReceiver(sendStatusReceiver, sendFilter);
//发送信息
to=(EditText)findViewById(R.id.to);
msgInput=(EditText)findViewById(R.id.msg_input);
send=(Button)findViewById(R.id.send);
send.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SmsManager smsManager=SmsManager.getDefault();
Intent sentIntent=new Intent("SENT_SMS_ACTION");
PendingIntent pi=PendingIntent.getBroadcast(MainActivity.this, 0, sentIntent, 0);
smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(),pi, null);
}
});
}
protected void onDestroy()
{
super.onDestroy();
unregisterReceiver(messageReceiver);
}
class MessageReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Bundle bundle=intent.getExtras();
Object []pdus=(Object[])bundle.get("pdus");//提取短信消息
SmsMessage[] messages=new SmsMessage[pdus.length];
for(int i=0;i
messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]);
}
String address=messages[0].getOriginatingAddress();//获取发送方号码
String fullMessage="";
for(SmsMessage message:messages)
{
fullMessage+=message.getMessageBody();//获取短信内容
}
sender.setText(address);
content.setText(fullMessage);
}
}
class SendStatusReceiver extends BroadcastReceiver
{
//实现了对于短信是否发送成功的广播监听
public void onReceive(Context context, Intent intent) {
if(getResultCode()==RESULT_OK)
{
Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context, "短信发送失败", Toast.LENGTH_SHORT).show();
}
}
}
}
三、调用手机摄像头和相册
public class MainActivity extends ActionBarActivity {
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
public static final int CHOOSE_PHOTO = 3;
private Button takePhoto;
private ImageView picture;
private Button chooseFromAlbum;
private Uri imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//空指针异常有可能是没有find按钮
//注意查看日志时候的Cause by
takePhoto = (Button) findViewById(R.id.take_photo);
picture = (ImageView) findViewById(R.id.picture);
chooseFromAlbum=(Button)findViewById(R.id.choose_from_album);
takePhoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 创建File对象,用于存储拍照后的照片
File outputImage = new File(Environment
.getExternalStorageDirectory(), "output_image.jpg");
if (outputImage.exists()) {
outputImage.delete();
}
try {
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
}
});
chooseFromAlbum.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, CHOOSE_PHOTO);// 打开相册
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);// 启动裁剪程序
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
try {
Bitmap bitmap = BitmapFactory
.decodeStream(getContentResolver().openInputStream(
imageUri));
picture.setImageBitmap(bitmap);// 将裁减后的照片显示出来
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
case CHOOSE_PHOTO:
if (resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= 19) {// 判断手机版本号
handleImageOnKitKat(data);
} else {
handleImageBeforeKitKat(data);
}
}
break;
default:
break;
}
}
@TargetApi(19)
private void handleImageOnKitKat(Intent data) {
String imagePath = null;
Uri uri = data.getData();
if (DocumentsContract.isDocumentUri(this, uri)) {
//如果是document类型的Uri,则通过document id处理
String docId = DocumentsContract.getDocumentId(uri);
if ("com.android.providers.media.documents".equals(uri
.getAuthority())) {
String id = docId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=" + id;
imagePath = getImagePath(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
} else if ("com.android.providers.media.downloads.documents"
.equals(uri.getAuthority())) {
Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content: downloads/public_downloads"),
Long.valueOf(docId));
imagePath = getImagePath(contentUri, null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// 如果不是document类型的Uri,则使用普通方式处理
imagePath = getImagePath(uri, null);
}
displayImage(imagePath);
}
private void handleImageBeforeKitKat(Intent data) {
Uri uri = data.getData();
String imagePath = getImagePath(uri, null);
displayImage(imagePath);
}
private String getImagePath(Uri uri, String selection) {
String path = null;
//通过Uri和selection来获取真实的图片信息
Cursor cursor = getContentResolver().query(uri, null, selection, null,
null);
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(Media.DATA));
}
cursor.close();
}
return path;
}
private void displayImage(String imagePath) {
if (imagePath != null) {
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
picture.setImageBitmap(bitmap);
} else {
Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT)
.show();
}
}
}
在这个程序中调试时出现了空指针的异常错误,学会查看日志文件,去寻找Cause By,最终原因是由于
没有获取控件的实例,由于这属于编译时异常,所以系统不会提示错误,以后一定要注意!!!
四、播放音频
public class MainActivity extends ActionBarActivity implements OnClickListener{
private Button play;
private Button pause;
private Button stop;
private MediaPlayer mediaPlayer=new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play=(Button)findViewById(R.id.play);
pause=(Button)findViewById(R.id.pause);
stop=(Button)findViewById(R.id.stop);
play.setOnClickListener(this);
stop.setOnClickListener(this);
pause.setOnClickListener(this);
initMediaPlayer();
}
private void initMediaPlayer()
{
try {
File file=new File(Environment.getExternalStorageDirectory(),"music.mp3");
//指定音频文件的路径
mediaPlayer.setDataSource(file.getPath());
//让MediaPlayer进入准备状态
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
}
//实现接口这种方法比较简单
public void onClick(View v)
{
switch (v.getId()) {
case R.id.play:
if(!mediaPlayer.isPlaying())
mediaPlayer.start();//开始播放
break;
case R.id.pause:
if(mediaPlayer.isPlaying())
mediaPlayer.pause();
break;
case R.id.stop:
if(mediaPlayer.isPlaying())
{
mediaPlayer.reset();//回到起点
initMediaPlayer();
}
break;
default:
break;
}
}
protected void onDestroy()
{
super.onDestroy();
if(mediaPlayer!=null)
{
mediaPlayer.stop();
mediaPlayer.release();
}
}
}
五、播放视频
public class MainActivity extends ActionBarActivity implements OnClickListener{
private VideoView videoView;
private Button play;
private Button pause;
private Button replay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play=(Button)findViewById(R.id.play);
pause=(Button)findViewById(R.id.pause);
replay=(Button)findViewById(R.id.stop);
videoView=(VideoView)findViewById(R.id.video_view);
play.setOnClickListener(this);
pause.setOnClickListener(this);
replay.setOnClickListener(this);
initVideoPath();
}
private void initVideoPath()
{
File file=new File(Environment.getExternalStorageDirectory(),"测试视频.3gp");
videoView.setVideoPath(file.getPath());//指定文件路径
}
public void onClick(View v)
{
switch (v.getId()) {
case R.id.play:
if(!videoView.isPlaying())
videoView.start();
break;
case R.id.pause:
if(videoView.isPlaying())
videoView.pause();
break;
case R.id.stop:
if(videoView.isPlaying())
videoView.resume();
break;
default:
break;
}
}
protected void onDestroy()
{
super.onDestroy();
if(videoView!=null)
videoView.suspend();
}
}
好了,这就是所学的项目,留着自己慢慢研究,今天时间有点早,明天姥爷生日,happy一下,明天加油,晚安!