Android《第一行代码》简要笔记(三)
第八章、多媒体
1、通知
Android使用Notification Manager来管理通知,getSystemService()
来获取对象实例。
|
|
因Android版本众多,迭代更新Notification亦在更新,故而Android官方使用NotificationCompat
作为兼容包。
Notification notification = new NotificationCompat.Builder(context).build();
|
|
如上创建了一个Notification对象,需要用Manager来管理
|
|
PendingIntent:类似与Intent,它会在适当的时机去执行这个意图,理解为延迟版的Intent。
- PendingIntent
getActivity()、getService()、getBroadcast()。四个参数来获取实例对象。
1234567891011121314151617 >...> Intent intent = new Intent(this,MyNotificationActivity.class);//点击的响应启动>PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);//四个参数,最后一个是Flag。>//NotificationManager>NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);>//Notification>Notification notification = new NotificationCompat.Builder(context)> .setContentTitle("Notification Title")> .setContextText("Content Text in Notification ")> .setWhen(System.currentTimeMillis())> .setSmallIcon(R.drawable.small_icon)> .setLargeIcon(BitmapFactory.decodeResource(getResource(),R.drawable.large_icon))> //设置通知被点击后的响应> .setContentIntent(pi)> .build();>manager.notify(1,notification);>
>
通知的取消,有两种方式
- NotificationCompat构建它的时候,设置
setAutoCancel(true)
- 用NotificationManager对象来
manager.cancel(1);
此处传入的id是上面代码中指定的通知的id。
通知还有许多其他用法:
|
|
setPriority
设置通知的优先级,默认都是一般。
|
|
|
|
2、Camera
- 调取摄像头拍照获得图片
|
|
如上,在Android 7.0以下获取uri不太麻烦,7.0以上则需要provider获取。就要在AndroidManifest中注册
|
|
上面的Provider引用了xml就需要创建
|
|
这里external-path就是指定uri共享的路径,path表示共享整个sd卡。4.4版本一下,需要声明sd卡权限。
- 从相册获取图片
书中代码包含了运行时权限判断,此处仅写出关键代码
|
|
3、播放多媒体
- 音频
MediaPlayer
类提供了良好的封装的方法
|
|
注意:1、权限的判断;2、播放、暂停、停止等操作要判断是否在playing,释放资源判断是否为空。
视频播放
类似与音频播放,Android提供了VideoView来操作。
1234567setVieoPath();start();pause();resume();seekTo();isPlaying();getDuration();
第九章、网络
1、WebView
|
|
2、Http访问
|
|
GET
与POST
请求为常用的HTTP请求,若用POST
注意其中数据用键值对形式,数据与数据之间用&
符号。
|
|
3、OKHttp框架
okhttp算是比较优秀的网络框架,使用需要在AndroidStudio中添加依赖
|
|
|
|
xml数据解析
1234567891011121314151617181920212223242526272829303132...//PUll解析String xmlData;XmlPullParseFactory factory = XmlPullParseFactory.newInstance();XmlPullParser parser = factory.newPullParser();parser.setInput(new StringReader(xmlData));int eventType = parser.getEventType();String id = "";String name = "";String version = "";while(eventType != XmlPullParser.END_DOCUMENT){String nodeName = parser.getName();switch(eventType){case XmlPullParser.START_TAG://根据nodeName获取对应内容if("id".equals(nodeName)){id = parser.nextText();}else if("name".equals(nodeName)){name = parser.nextText();}else if("version".equals(nodeName)){version = parser.nextText();}break;case XmlPullParser.END_TAG:...break;default:break;}eventType = parser.next();}SAX解析太繁杂。
JSON数据解析
1[{"id":"5","version":"5.5","name":"Clash of Clans"}]- 使用JsonObject
123456789...JSONArray array = new JSONArray(jsonData);for(int i = 0;i < array.length();i++){JSONObject obj = array.getJSONObject(i);String id = obj.getString("id");String version = obj.getString("version");String name = obj.getString("name");}...- GSON
Google开源的JSON解析工具,AndroidStudio添加Gradle依赖。
compile 'com.google.code.gson:gson:2.7'
Gson是一个json转化为java Bean对象的工具。1{"name":"Tom","age":"20"}12Gson gson = new Gson();Person person = gson.fromJson(jsonData,Person.class);如果是json数组,需要借助
TypeToken
1List<Person> people = gson.from(jsonData,new TypeToken<List<Person>>(){}.getType());