当前位置: 编程技术>移动开发
本页文章导读:
▪新风干浪博客学习(一)plist文件读写操作 新风作浪博客学习(一)plist文件读写操作
文件plist 全名Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文.........
▪ 加减的艺术用来工作学习管理 加减的艺术用于工作学习管理
回顾做过的事情,总结起来,就是先加,后减,再加。不是吗?上学:先一点点的学习,积累,到现在,回忆似乎懂的就是那么一点?做软件:先了解业务、.........
▪ VideoView容易视频播放 VideoView简单视频播放
只是上上手而已的例子。
package com.chenchen.app;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.Activity;
.........
[1]新风干浪博客学习(一)plist文件读写操作
来源: 互联网 发布时间: 2014-02-18
新风作浪博客学习(一)plist文件读写操作
文件plist 全名Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。file->new->file->左边选Resource 右边选 Property List点右下角的next然后起名,出来的就是你要的plist文件
此处用例举一个plist文件的Demo,只是对plist文件简单的读写操作
新建工程命名plistFile,class Prefix 填写PF,然后next
[img]
[/img]
开始的时候并没有加入plist文件,除了工程自动生成的plistFile-Info.plist,然后直接在PFViewContoller.m文件中的viewDidLoad添加代码:
这样做的目的只是想测试一下如果我们没有手工创建一个plist文件,当我们读取的时候系统会不会自动创建一个plist文件,测试结果是系统不会生成plist文件,输出plist文件内容为nil,运行结果截图:
[img]
[/img]
然后我们在手动创建一个plist文件,命名为testInfo.plist
[img]
[/img]
[img]
[/img]
[img]
[/img]
通过手动创建了plist文件后再次运行,可以读取数据:
[img]
[/img]
但是当我们打开testInfo.plist文件时,发现没有内容,这个有些不理解:
[img]
[/img]
然后我们在testInfo.plist文件右键Add Row,就可在里面添加数据;
[img]
[/img]
手动在testInfo.plist中添加了如下数据,然后点击运行:
[img]
[/img]
[img]
[/img]
从结果中我们可以看出,Key1,和key2在第一个NSLog打印中没有,因为key1和key2是在第一个NSLog后在写入testInfo.plist之中;
怎样用代码在向testInfo.plist中添加一个数组呢,在ViewDidLoad后面添加如下代码,即可以实现:
运行结果截图如下:
[img]
[/img]
文件plist 全名Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。file->new->file->左边选Resource 右边选 Property List点右下角的next然后起名,出来的就是你要的plist文件
此处用例举一个plist文件的Demo,只是对plist文件简单的读写操作
新建工程命名plistFile,class Prefix 填写PF,然后next
[img]
[/img]
开始的时候并没有加入plist文件,除了工程自动生成的plistFile-Info.plist,然后直接在PFViewContoller.m文件中的viewDidLoad添加代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 读取plist文件
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"testInfo" ofType:@"plist"];
NSMutableDictionary *data=[[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
// 打印出plist文件
NSLog(@"%@",data);
// 写入plist文件
[data setObject:@"test1" forKey:@"key1" ];
[data setObject:@"test2" forKey:@"key2"];
[data writeToFile:@"testInfo.plist" atomically:YES];
NSLog(@"%@",data);
NSLog(@"%@",[data objectForKey:@"key2"]);
}这样做的目的只是想测试一下如果我们没有手工创建一个plist文件,当我们读取的时候系统会不会自动创建一个plist文件,测试结果是系统不会生成plist文件,输出plist文件内容为nil,运行结果截图:
[img]
[/img]
然后我们在手动创建一个plist文件,命名为testInfo.plist
[img]
[/img]
[img]
[/img]
[img]
[/img]
通过手动创建了plist文件后再次运行,可以读取数据:
[img]
[/img]
但是当我们打开testInfo.plist文件时,发现没有内容,这个有些不理解:
[img]
[/img]
然后我们在testInfo.plist文件右键Add Row,就可在里面添加数据;
[img]
[/img]
手动在testInfo.plist中添加了如下数据,然后点击运行:
[img]
[/img]
[img]
[/img]
从结果中我们可以看出,Key1,和key2在第一个NSLog打印中没有,因为key1和key2是在第一个NSLog后在写入testInfo.plist之中;
怎样用代码在向testInfo.plist中添加一个数组呢,在ViewDidLoad后面添加如下代码,即可以实现:
NSArray *array = [[NSArray alloc] initWithObjects:@"tes11",@"test12",@"test13",@"test14", nil];//数组初始化
[data setObject:array forKey:@"arraytest"];//设置数组键值
[data writeToFile:@"customInfo.plist" atomically:YES];//将数组数据写入testInfo.plist文件中
NSLog(@"%@",data);运行结果截图如下:
[img]
[/img]
[2] 加减的艺术用来工作学习管理
来源: 互联网 发布时间: 2014-02-18
加减的艺术用于工作学习管理
回顾做过的事情,总结起来,就是先加,后减,再加。
不是吗?
上学:先一点点的学习,积累,到现在,回忆似乎懂的就是那么一点?
做软件:先了解业务、客户、尽可能的了解、模拟过程,到形成原型,再到产品,中间进行了多少次的加、减 ?
要注意的是千万不要将次要的东西当成主要矛盾来处理。
刚才想到了很多,现在突然好像又忘记了,请大家一起来写下去吧,
谢谢大力支持!
回顾做过的事情,总结起来,就是先加,后减,再加。
不是吗?
上学:先一点点的学习,积累,到现在,回忆似乎懂的就是那么一点?
做软件:先了解业务、客户、尽可能的了解、模拟过程,到形成原型,再到产品,中间进行了多少次的加、减 ?
要注意的是千万不要将次要的东西当成主要矛盾来处理。
刚才想到了很多,现在突然好像又忘记了,请大家一起来写下去吧,
谢谢大力支持!
[3] VideoView容易视频播放
来源: 互联网 发布时间: 2014-02-18
VideoView简单视频播放
只是上上手而已的例子。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
<!--为屏蔽home健而加-->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
只是上上手而已的例子。
package com.chenchen.app;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
public class MainActivity extends Activity {
private Context context;
private VideoView videoView;
/*视频文件分别放在三个文件夹中,需要到时候全部放入一个list中随机播放*/
private static final String MUSIC_PATH_1 = new String("/sdcard/qingbao/1/");
private static final String MUSIC_PATH_2 = new String("/sdcard/qingbao/2/");
private static final String MUSIC_PATH_3 = new String("/sdcard/qingbao/3/");
private List<String> mMusicList = new ArrayList<String>();
private int curIndex = 0;//
Random r=new Random();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
listFiles();
}
/* 播放列表 */
private void listFiles() {
// 取得指定位置的文件设置显示到播放列表
File path_1 = new File(MUSIC_PATH_1);
File[] list = path_1.listFiles(new MusicFilter());
if (list.length > 0) {
for (File file : list) {
mMusicList.add(MUSIC_PATH_1+file.getName());
}
}
File path_2 = new File(MUSIC_PATH_2);
list = path_2.listFiles(new MusicFilter());
if (list.length > 0) {
for (File file : list) {
mMusicList.add(MUSIC_PATH_2+file.getName());
}
}
File path_3 = new File(MUSIC_PATH_3);
list = path_3.listFiles(new MusicFilter());
if (list.length > 0) {
for (File file : list) {
mMusicList.add(MUSIC_PATH_3+file.getName());
}
}
}
/* 过滤文件类型 */
class MusicFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
// 这里还可以设置其他格式的文件
return (name.endsWith(".mp4"));
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if(videoView!=null&&videoView.isPlaying()){
videoView.pause();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
startVideo();
}
private void startVideo(){
videoView = (VideoView) findViewById(R.id.videoView);
MediaController mc = new MediaController(context);
videoView.setMediaController(mc);
// videoView.setVideoURI(Uri.parse("http://....h.3gp"));
videoView.requestFocus();
play();
videoView
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
play();//播放完毕再继续下一首
}
});
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
play();//播放出错再继续下一首
return true;
}
});
}
private void play(){
curIndex=r.nextInt(mMusicList.size());
videoView.setVideoPath(mMusicList.get(curIndex));
videoView.start();
}
private long waitTime = 2000;
private long touchTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& KeyEvent.KEYCODE_BACK == keyCode) {
long currentTime = System.currentTimeMillis();
if ((currentTime - touchTime) >= waitTime) {
Toast.makeText(context, "再按一次退出程序", Toast.LENGTH_SHORT).show();
touchTime = currentTime;
} else {
finish();
System.exit(0);
}
return true;
}else if(KeyEvent.KEYCODE_HOME == keyCode){
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onAttachedToWindow () {
/*本想屏蔽Home键,加上后播放器没画面,但有声音,why?*/
// this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
>
<VideoView
android:id="@+id/videoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
<!--为屏蔽home健而加-->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
最新技术文章: