
//互联网权限<uses-permission androID:name="androID.permission.INTERNET"/>//拍摄<uses-permission androID:name="androID.permission.CAMERA" />//硬件<uses-feature androID:name="androID.harDWare.camera" />//写存储设备 写SD卡的权限<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />//捕获视频<uses-permission androID:name="androID.permission.RECORD_AUdio" />//得到图片信息<uses-permission androID:name="androID.permission.ACCESS_FINE_LOCATION" />//短信发送权限<uses-permission androID:name="androID.permission.SEND_SMS"/>//杀死进程<uses-permission androID:name="androID.permission.KILL_BACKGROUND_PROCESSES"/>//手机信息<uses-permission androID:name="androID.permission.READ_PHONE_STATE" />查看keystore 数据打开CMD命令行进入本机安装的jdk或jre下的bin目录
keytool -List -v -keystore C:\Users\Desktop\browser\deBUG.keystore -storepass androID
keytool -List -v -keystore C:\Users\admin\.androID\deBUG.keystore -storepass androID
MD5: F8:FA:D2:BB:04:72:6E:E6:5C:48:28:F1:14:F9:09:AF
SHA1: 88:C3:75:6F:6F:6C:51:09:00:B6:45:CB:BD:FC:84:B8:E7:F3:F1:10
SHA256: 5B:0C:B2:43:8C:49:4B:6C:5B:BB:F5:77:ED:76:EE:E0:9D:7D:6A:7D:16:A1:DF:AD:6F:FC:56:5F:F0:FC:8E:79
签名算法名称: SHA256withRSA
版本: 3
1.创建一个内部类定义点击事件
setonClickListener(new qwe())//点击事件
qwe 需要实现 OnClickListener
2.匿名内部类定义点击事件
setonClickListener(new qwe{})
3setonClickListener(this)//本身的类需要实现OnClickListener
4.xml组件中添加onClick属性
Intent intent = new intent()
intent.setAction(Intent.ACTION_CALL)//指定事件 打电话
intent.setData(Uri.parse("tel:"+电话号码))
startActivity(intent)
1,前台进程:用户可以看见的某个Activity界面,可以 *** 作的界面
2,可见进程:用户仍可看见这个进程,某个Activity界面,但是用不可以 *** 作这个界面
3,服务进程:后台运行的服务进程
4,后台进程:没有服务进程,打开一个Activity之后 按了home键最小化
5, 空进程 :没有活动的组件,存在进程中
当内存不足时会自动回收5,4,释放资源 一般不会释放 1,2,3
//初始化并未创建(上下文,数据库名称,结果集(游标的对象null:系统默认的游标),数据库的版本(最小为1))PersonsqliteOpenHelper helper = new PersonsqliteOpenHelper(this, "mzw.db", null, 1);//创建数据库,getReadableDatabase:为可读的,getWritableDatabase:为可写的//得到数据库实例(可写)sqliteDatabase db = helper.getWritableDatabase();//得到数据库实例(可读)sqliteDatabase db = helper.getReadableDatabase();//PersonsqliteOpenHelper中有个onCreate方法,数据库第一次创建的时候调用 可再此方法中创建表db.execsql("create table person (ID integer primary key autoincrement,name varchar(20),number varchar(20))");//版本变化是调用onUpgrade数据库 事务//开启事务db.beginTransaction();try { //数据虎 *** 作 db.execsql(sql, new Object[]{name}); //标记数据库事务执行成功 db.setTransactionSuccessful();} finally { //关闭事务 db.endTransaction(); //关闭事务 db.close();}从0条开始 查询10条select * from user_chat limit 0,10杀死进程//得到自己进程的IDint myID = androID.os.Process.myPID();//杀死进程(只能用于自杀)androID.os.Process.killProcess(myID);//杀死别人 不能用于自杀ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);//需要权限 <uses-permission androID:name="androID.permission.KILL_BACKGROUND_PROCESSES"/>am.killBackgroundProcesses("com.example.message");return true;Activity启动模式清单中配置 androID:launchMode=
standard : 默认情况退出一个Activity,就把这个Activity从任务栈的栈顶移除,
如果任务栈空了,应用程序就关闭了。但是注意,进程还是存在的,
singletop : 避免同一个界面会重复的开启,
如果发现任务栈的栈顶已经有了这个Activity,再去开启Activity时,就不去重新创建了,而是复用这个栈顶已经存在的Activity
singleTask : 避免开启过多的Activity,以便节省内存和cpu资源
开启一个Activity B的时候 会检查任务栈中是否存在这个Activity B,如果存在,就清空这个Activity B上面所有的Activity,然后复用这个Activity B
singleInstance : 单例模式 开启一个新的任务栈。任务栈中只有一个Activity实例
如果Activity A开启,把A 任务栈放在前面。如果把Activity B开启,把B任务栈放在前面
极端:在整个手机中只会有一个实例存在。
Intent的常用Flag参数:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_top);
FLAG_ACTIVITY_CLEAR_top:
例如现在的栈情况为:A B C D 。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_top标记,则栈情况变为:A B。
如果没有添加这个标记,则栈情况将会变成:A B C D B。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_top标记,并且目标Activity在栈中已经存在,
则将会把位于该目标activity之上的activity从栈中d出销毁。这跟上面把B的Launch mode设置成singleTask类似。
FLAG_ACTIVITY_NEW_TASK:
例如现在栈1的情况是:A B C。C通过intent跳转到D,并且这个intent添加了FLAG_ACTIVITY_NEW_TASK标记,如果D这个Activity在Manifest.xml中的声明中添加了Task affinity,
并且和栈1的affinity不同,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果有存在,将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。
如果D的Task affinity默认没有设置,或者和栈1的affinity相同,则会把其压入栈1,变成:A B C D,这样就和不加FLAG_ACTIVITY_NEW_TASK标记效果是一样的了。
注意如果试图从非activity的非正常途径启动一个activity,比如从一个service中启动一个activity,则intent必须要添加FLAG_ACTIVITY_NEW_TASK标记。
FLAG_ACTIVITY_NO_HISTORY:
例如现在栈情况为:A B C。C通过intent跳转到D,这个intent添加FLAG_ACTIVITY_NO_HISTORY标志,则此时界面显示D的内容,但是它并不会压入栈中。如果按返回键,
返回到C,栈的情况还是:A B C。如果此时D中又跳转到E,栈的情况变为:A B C E,此时按返回键会回到C,因为D根本就没有被压入栈中。
FLAG_ACTIVITY_SINGLE_top:和上面Activity的Launch mode的singletop类似。如果某个intent添加了这个标志,并且这个intent的目标activity就是栈顶的activity,那么将不会新建一个实例压入栈中。
Activity的主要属性:(在 AndroIDManifest.xml中 <activity androID:XXX />)
allowTaskreparenting:设置成true时,和Intent的FLAG_ACTIVITY_NEW_TASK标记类似。
alwaysRetainTaskStat: 如果用户长时间将某个task移入后台,则系统会将该task的栈内容d出只剩下栈底的activity,此时用户再返回,则只能看到根activity了。如果栈底的activity的这个属性设置成true,则将阻止这一行为,从而保留所有的栈内容。
clearTaskOnLaunch:根activity的这个属性设置成true时,和上面的alwaysRetainTaskStat的属性为true情况搞好相反。
finishOnTaskLaunch:对于任何activity,如果它的这个属性设置成true,则当task被放置到后台,然后重新启动后,该activity将不存在了。
activity 标签中配置
androID:screenorIEntation=""
landscape : 水平
portrait : 竖屏
屏幕切换时,销毁原有的Activity 重新创建
androID:configChanges=""
orIEntation|keyboardHIDden|screenSize 不会销毁Activity
自定义广播接收者
类要继承broadcastReceiver
设置自定义广播过滤器
<receiver androID:name="com.example.ipdail.SmsReceiver"> <intent-filter androID:priority="1000">广播优先级 <action androID:name="mzw.it.xxx"></action>自定义的 </intent-filter></receiver>有了广播接收者 就需要有发送者
自定义广播发送者
//把自定义的广播发送出去Intent inten = new Intent();inten.setAction("mzw.it.xxx");sendbroadCast(inten);//发送一条无序的广播事件sendOrderedbroadCast(inten,null);//发送一条有序的广播事件//指定广播接受制。new Class 代表一个类,当指定这个接收者后,将忽略优先级、终止广播等sendOrderedbroadCast(inten,null,new Class,null,0,null,null);如果广播是无序的,那么所有广播接收者将都会接受到这个事件
如果广播是有序的,那么广播接受者会按照优先级接收这个事件
高优先级 会先接受到这个事件,低优先级 会后接受到事件
有序广播特点:
高优先级的广播接受者可以终止掉广播
abortbroadcast();
system.currenTimeMillis();if ((System.currentTimeMillis() - inputTime) > 2000) { // 时间间隔大于2000毫秒,。。。} 图片 *** 作exif获取图片信息ExifInterface exif = new ExifInterface("/sdcard/test.jpg");//时间String time = exif.getAttribute(ExifInterface.TAG_DATETIME);//什么模式的相机(设备型号)String model = exif.getAttribute(ExifInterface.TAG_MODEL);//纬度String latttude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);//经度String longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);// 图片长String length = exif.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);//图片宽String wIDth = exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);//设备制造商String make = exif.getAttribute(ExifInterface.TAG_MAKE);String msg = "\n设备型号:"+model+"" + "\n设备制造商:"+make+"" + "\n纬度:"+latttude+"" + "\n经度:"+longitude+"" + "\n图片长:"+length+"" + "\n图片宽:"+wIDth+"";保存图片file file = new file(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");System.out.println("保存路径:"+file);//输出流fileOutputStream os = new fileOutputStream(file);//保存文件(保存格式,质量,流)newbitmap.compress(CompressFormat.JPEG, 100, os);//模拟一个消息通知,SD被重新挂载了Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_MOUNTED);图片水印//copy图片并在上边写字Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.b9, opts);//1,创建一个空白图片,和原图片一样大Bitmap newbitmap = Bitmap.createBitmap(bitmap.getWIDth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);//2,得到一个画布Canvas canvas = new Canvas(newbitmap);//3,在画布上canvas.drawBitmap(bitmap, new Matrix(), new Paint());//Paint paint = new Paint();//canvas.drawText("我是拷贝图片", 10, 10, paint);return newbitmap;图片缩放Matrix matrix = new Matrix();matrix.setScale(x,y);canvas.drawBitmap(bitmap, new Matrix(), new Paint());图片旋转Matrix matrix = new Matrix();参数 :旋转度数(0 - 360),X,Y//bitmap.getWIDth()/2,bitmap.getHeight()/2 --- 以图片中心为 轴matrix。setScale(180,bitmap.getWIDth()/2,bitmap.getHeight()/2);//因为在旋转的时候会丢失像素所以 提供了一个方法Paint paint = new Paint();//消除锯齿(内部为算法)paint.setAntiAlias(true);canvas.drawBitmap(bitmap, new Matrix(), new Paint());图片平移Matrix matrix = new Matrix();//此方法canvas.drawBitmap执行完后变化matrix.setTranslate(X,Y)//此方法会立即执行matrix.postTranslate(X,Y)canvas.drawBitmap(bitmap, new Matrix(), new Paint());图片镜面效果Matrix matrix = new Matrix();matrix.setScale(x,y);//缩放matrix.postTranslate(X,Y)//平移//缩放时X为 -1//将图片平移(否则就看不见图了)图片倒影效果Matrix matrix = new Matrix();matrix。setScale(x,y);//缩放matrix.postTranslate(X,Y)//平移//缩放时Y为 -1//将图片平移(否则就看不见图了)图片合成//原理就创建一个画布 将两个图片加载到这个画布中canvas.drawBitmap(bitmap1, new Matrix(), new Paint());canvas.drawBitmap(bitmap2, new Matrix(), new Paint());/*但是有 16 种模式空白。显示1.显示2.显示1和2并且1在2上,显示1和2并且2在1上,显示1与2重叠的1部分,显示1与2重叠的2部分 等等*/Paint。setXfermode(new ProterDuffXfermode(androID.graphics.PorterDuff.Mode.XXXX))多媒体mediaplayer 音频 --- 用来播放比较长得音频,如果用他播放短而密集的音频就会出现延迟
// 响铃 调用raw文件中的音乐文件MediaPlayer.create(this, R.raw.information).start(); // 响铃SoundPool 音频 --- 可以播放短而密集的音频
private SoundPool soundPool; private int soundID; private Seekbar seekbar1; private float ff; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.fragment_main); seekbar1 = (Seekbar)super.findVIEwByID(R.ID.seekbar1); //声音池的初始化(最多可放资源,) soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); //加载声音(上下文,资源,播放优先级),并且返回资源的ID soundID = soundPool.load(this, R.raw.girl_sound, 1); seekbar1.setMax(200); seekbar1.setonSeekbarchangelistener(new OnSeekbarchangelistener() { @OverrIDe public voID onStopTrackingtouch(Seekbar seekbar) { System.out.println("=getProgress="+seekbar.getProgress()); System.out.println("=getProgress="+seekbar.getProgress()/100.0f); ff = seekbar.getProgress()/100.0f; System.out.println("ff="+ff); if(ff < 0.5f){ ff = 0.5f; } Toast.makeText(getApplicationContext(), "当前播放速度为:"+ff, 0).show(); } @OverrIDe public voID onStartTrackingtouch(Seekbar seekbar) { } @OverrIDe public voID onProgressChanged(Seekbar seekbar, int progress, boolean fromUser) { } }); } public voID click(VIEw vIEw){ /** * 播放声音(声音ID,左边音量大小, * 右边音量大小(range = 0.0 to 1.0), * 优先级0最低(range = 0.0 to 1.0), * 循环模式(0 =没有循环,-1 =循环永远), * 率播放率(1.0 =正常播放,范围0.5 - 2.0)----就是播放速度 * ) */ soundPool.play(soundID, 1.0f, 1.0f, 0, 0, ff); }SurfaceVIEw 视频播放原理:
分析:视频文件的格式
读取:文件的数据(把每一帧都转化成图片 显示到界面上)
SurfaceVIEw 采用了双缓冲计算 的技术
原来的:解析帧 --> 显示画面 --> 解析帧 --> 显示画面 --> 。。。
双缓冲:A线程:解析帧 --> 显示画面 --> 解析帧 --> 显示画面 --> 。。。
B线程: 解析帧 --> 显示画面 --> 解析帧 --> 显示画面 --> 。。。
实际上是两个线程不断的在切换后台解析与前台显示的动作
//设置监听,当返回桌面时暂停播放并记录播放进度,播放器重新启动时并指定进度播放sv.getHolder().addCallback(new Callback() { @OverrIDe public voID surfaceDestroyed(SurfaceHolder holder) { // Todo auto-generated method stub System.out.println("holder销毁了..."); if(mediaPlayer != null && mediaPlayer.isPlaying()){ currentposition = mediaPlayer.getCurrentposition();//得到当前不放的进度 stop(); } } @OverrIDe public voID surfaceCreated(SurfaceHolder holder) { // Todo auto-generated method stub System.out.println("holder创建了..."); if(currentposition > 0){ start(currentposition); } } @OverrIDe public voID surfaceChanged(SurfaceHolder holder, int format, int wIDth, int height) { // Todo auto-generated method stub System.out.println("holder分辨率改变了..."); }});mediaPlayer = new MediaPlayer();//指定播放文件的类型mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//指定视频在SurfaceVIEw组建中播放mediaPlayer.setdisplay(sv.getHolder());//加载文件mediaPlayer.setDataSource(url);//异步调用(准备)mediaPlayer.prepareAsync();//监听,是否加载完毕mediaPlayer.setonPreparedListener(new OnPreparedListener() { @OverrIDe public voID onPrepared(MediaPlayer mp) { mediaPlayer.start(); mediaPlayer.seekTo(currentposition); start.setEnabled(false); }});//开始mediaPlayer.start();//暂停mediaPlayer.pause();////指定本地开始播放的位置mediaPlayer.seekTo(0);//暂停mediaPlayer.stop();//释放资源mediaPlayer.release();mediaPlayer = null;//得到当前不放的进度mediaPlayer.getCurrentposition()//得到视频的总程度mediaPlayer.getDuration();通知对话框public voID click1(VIEw vIEw){ //对话框的构造器 AlertDialog.Builder builder = new Builder(this); //标题 builder.setTitle("对话框标题"); //图标(logo) builder.setIcon(R.drawable.ic_launcher); //对话框消息 builder.setMessage("是否继续?"); //确定按钮 builder.setPositivebutton("确定", new OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "点击的是:确定", 0).show(); } }); //取消按钮 builder.setNegativebutton("取消",new OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { // 取消后什么也不 *** 作 } }); //创建对话框 builder.create().show();}单选对话框public voID click2(VIEw vIEw){ //对话框的构造器 AlertDialog.Builder builder = new Builder(this); //标题 builder.setTitle("选择性别"); final String[] items = new String[]{"男性","女性"}; //设定单选扭 builder.setSingleChoiceItems(items, 0, new OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { // Todo auto-generated method stub Toast.makeText(MainActivity.this, "选择的性别是:"+items[which],0).show(); //选中 后关闭对话框 dialog.dismiss(); } }); //取消按钮 builder.setNegativebutton("取消",new OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { // 取消后什么也不 *** 作 } }); builder.show();}多选对话框public voID click3(VIEw vIEw){ //对话框的构造器 AlertDialog.Builder builder = new Builder(this); //标题 builder.setTitle("选择 爱好"); final String[] items = new String[]{"红色","橙色","黄色","绿色","蓝色"}; //设定单选扭boolean 为默认被选择 builder.setMultiChoiceItems(items, new boolean[]{true,false,false,false,false}, new OnMultiChoiceClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which, boolean isChecked) { // Todo auto-generated method stub Toast.makeText(MainActivity.this, items[which]+":"+isChecked, 0).show(); } }); //取消按钮 builder.setNegativebutton("取消",new OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { // 取消后什么也不 *** 作 } }); builder.show();}进度条对话框public voID click5(VIEw vIEw){ final ProgressDialog pd = new ProgressDialog(this); //进度样式(水平) pd.setProgressstyle(ProgressDialog.STYLE_HORIZONTAL); pd.setTitle("进度提醒"); pd.setMessage("正在加载中..."); //对大进度 pd.setMax(100); pd.show(); //模拟进度条的加载数据 new Thread(){ public voID run() { for(int i = 0;i < 100;i++){ pd.setProgress(i); try { Thread.sleep(40); } catch (InterruptedException e) { e.printstacktrace(); } } pd.dismiss();//关闭对话框 }; }.start();}tween 动画透明度变化public voID click1(VIEw vIEw) { // 开始的透明度(0.0f - 1.0f),结束透明度(0.0f - 1.0f) AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f); // 完成时间(从透明度到不透明用时) animation.setDuration(3000); // 执行次数 animation.setRepeatCount(1); // 执行模式,REVERSE 反着执行 animation.setRepeatMode(Animation.REVERSE); // 执行动画 // iv.setAnimation(animation); iv.startAnimation(animation);}缩放变化public voID click2(VIEw vIEw) { // 水平方向的缩放开始,结束 X // 垂直方向的缩放开始,结束 Y // X 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心 // Y 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心 ScaleAnimation animation = new ScaleAnimation(0.2f, 2.0f, 0.2f, 2.0f, Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF, 0.5f); // 完成时间(从透明度到不透明用时) animation.setDuration(3000); // 执行次数 animation.setRepeatCount(1); // 执行模式,REVERSE 反着执行 animation.setRepeatMode(Animation.REVERSE); // 执行动画 iv.startAnimation(animation);}旋转变化public voID click3(VIEw vIEw) { // 旋转角度开始,结束 // X 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心 // Y 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心 RotateAnimation animation = new RotateAnimation(0, 360, Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF, 0.5f);// 相当于以中心旋转360度 // 完成时间(从透明度到不透明用时) animation.setDuration(3000); // 执行次数 animation.setRepeatCount(1); // 执行模式,REVERSE 反着执行 animation.setRepeatMode(Animation.REVERSE); // 执行动画 iv.startAnimation(animation);}平移变化public voID click4(VIEw vIEw) { // X 坐标的类型(相对于父窗体relative_TO_PARENT), 开始X坐标 // X 坐标的类型(相对于父窗体relative_TO_PARENT), 结束X坐标 // Y 坐标的类型(相对于父窗体relative_TO_PARENT), 开始Y坐标 // Y 坐标的类型(相对于父窗体relative_TO_PARENT), 结束Y坐标 TranslateAnimation animation = new TranslateAnimation( Animation.relative_TO_SELF, 0.0f, Animation.relative_TO_PARENT, 1.2f, Animation.relative_TO_SELF, 0.0f, Animation.relative_TO_PARENT, 1.2f); // 完成时间(从透明度到不透明用时) animation.setDuration(3000); // 执行次数 animation.setRepeatCount(1); // 执行模式,REVERSE 反着执行 animation.setRepeatMode(Animation.REVERSE); // 执行动画 iv.startAnimation(animation);}组合变化public voID click5(VIEw vIEw) { // 动画播放的速率 AnimationSet animation = new AnimationSet(false); // 定义动画 -- 平移 TranslateAnimation ta = new TranslateAnimation( Animation.relative_TO_SELF, 0.0f, Animation.relative_TO_PARENT, 1.2f, Animation.relative_TO_SELF, 0.0f, Animation.relative_TO_PARENT, 1.2f); ta.setDuration(3000); ta.setRepeatCount(1); // 定义动画 -- 旋转 RotateAnimation ra = new RotateAnimation(0, 360, Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF, 0.5f);// 相当于以中心旋转360度 ra.setDuration(3000); ra.setRepeatCount(1); // 定义动画 -- 缩放 ScaleAnimation sa = new ScaleAnimation(0.2f, 2.0f, 0.2f, 2.0f, Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF, 0.5f); sa.setDuration(3000); sa.setRepeatCount(1); // 执行模式,REVERSE 反着执行 animation.setRepeatMode(Animation.REVERSE); // 将动画添加到集合 animation.addAnimation(ta); animation.addAnimation(ra); animation.addAnimation(sa); // 执行动画 iv.startAnimation(animation);}是让屏幕保持不暗不关闭的最好方法getwindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);AndroID全屏设置及取消全屏设置getwindow().setFlags(WindowManager.LayoutParams.FLAG_FulLSCREEN, WindowManager.LayoutParams.FLAG_FulLSCREEN);AndroID中全屏取消标题栏requestwindowFeature(Window.FEATURE_NO_Title);SD卡 路径Environment.getExternalStorageDirectory()单行文本跑马灯控件// 重新写一个 textvIEw 继承 textvIEw 重写 isFocused 方法public class ScrollForeverTextVIEw extends TextVIEw { public ScrollForeverTextVIEw(Context context) { super(context); // Todo auto-generated constructor stub } public ScrollForeverTextVIEw(Context context, AttributeSet attrs) { super(context, attrs); } public ScrollForeverTextVIEw(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @OverrIDe public boolean isFocused() { return true; }}androID:ellipsize="marquee"//滚动androID:focusable="true"androID:marqueeRepeatlimit="marquee_forever"//循环滚动androID:singleline="true"//一行显示textVIEw mine_forget_password.getPaint().setFlags(Paint.UNDERliNE_TEXT_FLAG);//下划线textVIEw.getPaint().setFlags(Paint. UNDERliNE_TEXT_FLAG ); //下划线textVIEw.getPaint().setAntiAlias(true);//抗锯齿textvIEw.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG); //中划线setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_AliAS_FLAG); // 设置中划线并加清晰 textVIEw.getPaint().setFlags(0); // 取消设置的的划线TextVIEw使用HTML// AndroID TextVIEw使用HTML处理字体样式、显示图片等 textvIEw HTML 图片 样式final String HTML="<HTML>" + "<head>" + "<Title>TextVIEw使用HTML</Title>" + "</head>" + "<body>" + "<p><strong>强调</strong></p>" + "<p><em>斜体</em></p>" + "<p><a href=\"http://www.dreamdu.com/xhtml/\">超链接HTML入门</a>学习HTML!</p>" + "<p><Font color=\"#aabb00\">颜色1</p>" + "<p><Font color=\"#00bbaa\">颜色2</p>" + "<h1>标题1</h1>" + "<h3>标题2</h3>" + "<h6>标题3</h6>" + "<p>大于>小于</p>" + "<p>下面是网络图片</p>" + "<img src=\"http://f.hiphotos.bdimg.com/album/w%3D2048/sign=8b216c08ac6eddc426e7b3fb0de3b4fd/0b55b319ebc4b745c67cf5fbcefc1e178b821576.jpg\"/>" + "<img src=\"https://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/>" + "</body>" + "</HTML>"; new Thread(new Runnable() { public voID run() { spanned = HTML.fromHTML(HTML, imgGetter, null); handler.sendEmptyMessage(5); }}).start();ImageGetter imgGetter = new HTML.ImageGetter() { public Drawable getDrawable(String source) { Drawable drawable = null; URL url; try { url = new URL(source); drawable = Drawable.createFromStream(url.openStream(), ""); //获取网路图片 } catch (Exception e) { e.printstacktrace(); return null; } drawable.setBounds(0, 0, drawable.getIntrinsicWIDth(), drawable.getIntrinsicHeight()); return drawable; } };bargain_item_004.setText(spanned); 隐藏键盘//隐藏键盘((inputMethodManager)getSystemService(input_METHOD_SERVICE)).hIDeSoftinputFromWindow(commoditySearchActivity.this.getCurrentFocus().getwindowToken(), inputMethodManager.HIDE_NOT_ALWAYS);androID 获取 手机信息//核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getdeviceid();//在manifest.xml文件中要添加 <uses-permission androID:name="androID.permission.READ_PHONE_STATE" />示例代码
package net.sunniwell.app; import androID.app.Activity; import androID.os.Bundle; import androID.telephony.CellLocation; import androID.telephony.PhonestateListener; import androID.telephony.TelephonyManager; public class TelManager extends Activity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE); /* * 电话状态: * 1.tm.CALL_STATE_IDLE=0 无活动 * 2.tm.CALL_STATE_RINGING=1 响铃 * 3.tm.CALL_STATE_OFFHOOK=2 摘机 */ tm.getCallState();//int /* * 电话方位: * */ tm.getCellLocation();//CellLocation /* * 唯一的设备ID: * GSM手机的 IMEI 和 CDMA手机的 MEID. * Return null if device ID is not available. */ tm.getdeviceid();//String /* * 设备的软件版本号: * 例如:the IMEI/SV(software version) for GSM phones. * Return null if the software version is not available. */ tm.getDeviceSoftwareversion();//String /* * 手机号: * GSM手机的 MSISDN. * Return null if it is unavailable. */ tm.getline1Number();//String /* * 附近的电话的信息: * 类型:List<NeighboringCellinfo> * 需要权限:androID.Manifest.permission#ACCESS_COARSE_UPDATES */ tm.getNeighboringCellinfo();//List<NeighboringCellinfo> /* * 获取ISO标准的国家码,即国际长途区号。 * 注意:仅当用户已在网络注册后有效。 * 在CDMA网络中结果也许不可靠。 */ tm.getNetworkCountryIso();//String /* * MCC+MNC(mobile country code + mobile network code) * 注意:仅当用户已在网络注册时有效。 * 在CDMA网络中结果也许不可靠。 */ tm.getNetworkOperator();//String /* * 按照字母次序的current registered operator(当前已注册的用户)的名字 * 注意:仅当用户已在网络注册时有效。 * 在CDMA网络中结果也许不可靠。 */ tm.getNetworkOperatorname();//String /* * 当前使用的网络类型: * 例如: NETWORK_TYPE_UNKNowN 网络类型未知 0 NETWORK_TYPE_GPRS GPRS网络 1 NETWORK_TYPE_EDGE EDGE网络 2 NETWORK_TYPE_umts umts网络 3 NETWORK_TYPE_HSDPA HSDPA网络 8 NETWORK_TYPE_HSUPA HSUPA网络 9 NETWORK_TYPE_HSPA HSPA网络 10 NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4 NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5 NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6 NETWORK_TYPE_1xRTT 1xRTT网络 7 */ tm.getNetworkType();//int /* * 手机类型: * 例如: PHONE_TYPE_NONE 无信号 PHONE_TYPE_GSM GSM信号 PHONE_TYPE_CDMA CDMA信号 */ tm.getPhoneType();//int /* * Returns the ISO country code equivalent for the SIM provIDer's country code. * 获取ISO国家码,相当于提供SIM卡的国家码。 * */ tm.getSimCountryIso();//String /* * Returns the MCC+MNC (mobile country code + mobile network code) of the provIDer of the SIM. 5 or 6 decimal digits. * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字. * SIM卡的状态必须是 SIM_STATE_READY(使用getSimstate()判断). */ tm.getSimOperator();//String /* * 服务商名称: * 例如:中国移动、联通 * SIM卡的状态必须是 SIM_STATE_READY(使用getSimstate()判断). */ tm.getSimOperatorname();//String /* * SIM卡的序列号: * 需要权限:READ_PHONE_STATE */ tm.getSimserialNumber();//String /* * SIM的状态信息: * SIM_STATE_UNKNowN 未知状态 0 SIM_STATE_ABSENT 没插卡 1 SIM_STATE_PIN_required 锁定状态,需要用户的PIN码解锁 2 SIM_STATE_PUK_required 锁定状态,需要用户的PUK码解锁 3 SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4 SIM_STATE_READY 就绪状态 5 */ tm.getSimstate();//int /* * 唯一的用户ID: * 例如:imsI(国际移动用户识别码) for a GSM phone. * 需要权限:READ_PHONE_STATE */ tm.getSubscriberID();//String /* * 取得和语音邮件相关的标签,即为识别符 * 需要权限:READ_PHONE_STATE */ tm.getVoiceMailAlphaTag();//String /* * 获取语音邮件号码: * 需要权限:READ_PHONE_STATE */ tm.getVoiceMailNumber();//String /* * ICC卡是否存在 */ tm.hasIccCard();//boolean /* * 是否漫游: * (在GSM用途下) */ tm.isNetworkRoaming();// } } SpannableString使用/** * 超链接 */ private voID addUrlSpan() { SpannableString spanString = new SpannableString("超链接"); URLSpan span = new URLSpan("tel:0123456789"); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 文字背景颜色 */ private voID addBackcolorSpan() { SpannableString spanString = new SpannableString("颜色2"); BackgroundcolorSpan span = new BackgroundcolorSpan(color.YELLOW); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 文字颜色 */ private voID addForecolorSpan() { SpannableString spanString = new SpannableString("颜色1"); ForegroundcolorSpan span = new ForegroundcolorSpan(color.BLUE); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 字体大小 */ private voID addFontSpan() { SpannableString spanString = new SpannableString("36号字体"); absoluteSizeSpan span = new absoluteSizeSpan(36); spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 粗体,斜体 */ private voID addStyleSpan() { SpannableString spanString = new SpannableString("BIBI"); StyleSpan span = new StyleSpan(Typeface.BolD_ITAliC); spanString.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 删除线 */ private voID addStrikeSpan() { SpannableString spanString = new SpannableString("删除线"); StrikethroughSpan span = new StrikethroughSpan(); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 下划线 */ private voID addUnderlinespan() { SpannableString spanString = new SpannableString("下划线"); Underlinespan span = new Underlinespan(); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } /** * 图片 */ private voID addImageSpan() { SpannableString spanString = new SpannableString(" "); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, d.getIntrinsicWIDth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.AliGN_BASEliNE); spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); } textvIEw中某些字段设置点击监听import androID.app.Activity;import androID.os.Bundle;import androID.text.SpannableString;import androID.text.Spanned;import androID.text.method.linkMovementMethod;import androID.text.style.ClickableSpan;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.linearLayout;import androID.Widget.TextVIEw;import androID.Widget.Toast; public class ClickableText extends Activity { /** Called when the activity is first created. */ private TextVIEw mClickableText; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); linearLayout layout = new linearLayout(this); mClickableText = new TextVIEw(this); mClickableText.setClickable(true); mClickableText.setTextSize(20); layout.addVIEw(mClickableText); setContentVIEw(layout); mClickableText.setText(getClickableSpan()); mClickableText.setMovementMethod(linkMovementMethod.getInstance()); } private SpannableString getClickableSpan() { VIEw.OnClickListener l = new VIEw.OnClickListener(){ @OverrIDe public voID onClick(VIEw v) { Toast.makeText(ClickableText.this, "Click Success", Toast.LENGTH_SHORT).show(); } }; SpannableString spanableInfo = new SpannableString("This is a test, Click Me"); int start = 16; int end = spanableInfo.length(); spanableInfo.setSpan(new Clickable(l), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return spanableInfo; }} class Clickable extends ClickableSpan implements OnClickListener{ private final VIEw.OnClickListener mListener; public Clickable(VIEw.OnClickListener l){ mListener = l; } @OverrIDe public voID onClick(VIEw v){ mListener.onClick(v); }}获取资源 以Stringname获取资源int sourceID = 0;try { FIEld fIEld = Class.forname("com.eworld.R$drawable").getFIEld(imagename); sourceID = fIEld.getInt(fIEld); } catch (Exception e) { // ...} 判断数字,判断字母,判断汉字
String txt = item.getTitle(); Pattern p = Pattern.compile("[0-9]*"); Matcher m = p.matcher(txt); if (m.matches()) { LogUtils.i("-----",txt+"->是数字"); }else{ LogUtils.i("-----",txt+"->不是数字"); }// p = Pattern.compile("[a-zA-Z]");// m = p.matcher(txt);// if (m.matches()) {// Toast.makeText(SystemMessageActivity.this, "输入的是字母", Toast.LENGTH_SHORT).show();// }// p = Pattern.compile("[\u4e00-\u9fa5]");// m = p.matcher(txt);// if (m.matches()) {// Toast.makeText(SystemMessageActivity.this, "输入的是汉字", Toast.LENGTH_SHORT).show();// }抓取图片地址
/** * 得到网页中图片的地址 http://image.baIDu.com/ */ public static List<String> getimgSrcList(String HTMLStr) { List<String> pics = new ArrayList<String>(); String regEx_img = "<img.*?src=\"http://(.*?).jpg\""; // 图片链接地址 Pattern p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE); Matcher m_image = p_image.matcher(HTMLStr); while (m_image.find()) { String src = m_image.group(1); if (src.length() < 100) { pics.add("http://" + src + ".jpg"); } } return pics; } 总结
以上是内存溢出为你收集整理的android 笔记全部内容,希望文章能够帮你解决android 笔记所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)