现在的位置: 首页 > 综合 > 正文

第一天:splash页面和防盗功能

2018年05月17日 ⁄ 综合 ⁄ 共 4665字 ⁄ 字号 评论关闭
mvc 结构(程序的结构图片)
另外一种包结构,以业务逻辑进行包的划分。


splash界面 :飞洒 飞溅

完成一个产品logo显示.
1. 后台完成数据库初始化的操作
2. 联网访问服务器,获取服务器最新信息 
3. 不同的时间显示出来不同logo  判断当前系统时间, 素材一般从服务器上下载下来.
4. 判断时间 根据时间显示不同的logo


  

1.明确项目的需求: 
2.美工人员根据需求构图.
3.开发

项目经理 控制项目开发进度.




1.在做程序自动安装更新的时候 ,必须保证程序的签名和包名是相同.
C:\Documents and Settings\zehua\.android  \ debug.keystore
debug的签名,开发时候的签名
Re-installation failed due to different application signatures.
Please execute 'adb uninstall cn.itcast.mobilesafe' in a shell.


2.


两种上下文

03-30 04:01:48.632: ERROR/AndroidRuntime(4841): 
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application



applicationcontext  生命周期 进程存在 上下文就存在

activity.this  activity 在任务栈 上下文存在 

一个是应用程序的上下文,只要你的这个程序的进程存在它就存在。
一个是当前activity的上下文,只要在任务栈中,这它就存在。

在打开数据库传入上下文时间,要用应用程序上下文,因为如果你用activity上下文,如果回收了
就不存在,就出错了,所以弹出框只能和acitvity上下文,如果是全局的要用全局上下文。





环境





03-30 07:26:36.151: WARN/ActivityManager(72): Permission Denial: receiving Intent { act=android.intent.action.NEW_OUTGOING_CALL (has extras) } to cn.itcast.mobilesafe requires
 android.permission.PROCESS_OUTGOING_CALLS due to sender com.android.phone (uid 1001)





03-30 07:28:38.542: ERROR/AndroidRuntime(7028): java.lang.RuntimeException: 
Unable to start receiver cn.itcast.mobilesafe.receiver.CallPhoneReceiver: 
android.util.AndroidRuntimeException: Calling startActivity() 
from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. 
Is this really what you want?




md5 -> md5 30次


笔记 :
LinearLayout有两个非常相似的属性:android:gravity与android:layout_gravity。
他们的区别在于:android:gravity用于设置View组件的对齐方式,
而android:layout_gravity用于设置Container组件的对齐方式。

举个例子,我们可以通过设置android:gravity="center"
来让EditText中的文字在EditText组件中居中显示;
同时我们设置EditText的android:layout_gravity="right"
来让EditText组件在LinearLayout中居中显示。

java代码 中引用 资源 的方法,记住,安卓 中上下文Context可以得到一切资源。
java代码中引用字符串资源的方法。
getApplicationContext().getString(R.string.versionWarn);

两种图标:
<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
这个是在安卓的管理程序显示的图标和名称。

 <activity
            android:icon="@drawable/icon5"
            android:label="@string/app_name"
            android:name=".ui.SplashActivity" >
这个在桌面显示。

文件保存编码方式和XML头的声明是否一致,否则你永远无法解析正确。
也就是说,你最好先自己从浏览器打开看看,能不能访问。

一般而言,业务方法的异常不要try catch而是要抛出来,否则别人调用
它如果方法出异常了能够得到并且处理,如果不抛出来,即使出问题了,
也找不到。在业务中,在方法中抛出,在action层,一定要包起来。给它处理了。

为什么有时间我们找不到R文件下的资源,因为我们引入包错了。
import cn.itcast.mobilesafe.R;
而我们可能会错误引入系统的包import android.R.
我们要引用自己系统下的R文件。

所有的弹出框的建立方法一样的,
 new AlertDialog.Builder(this)  
    .setTitle("单选框")  
    .setIcon(R.drawable.down)  
只是后面set的东西一样,有单选,多选,弹出等。
最后都是create().show();
其中比较厉害的一个是有一个setView(View view)里面可以传入任何
View对象,那厉害了,是吧。

操,这是我找了半天的错误:
public UpdataInfo getUpdataInfo(int urlid) throws Exception{
		String path = context.getResources().getString(urlid);
		URL url = new URL(path);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setRequestMethod("GET");
		connection.setConnectTimeout(2000);//如果超过两秒超时就不再连接,注意还有个方法是connection.setReadTimeout(timeout)不要混淆
		//我所有的错误原来来自于这里面这个如果你不设置连接超时,那么它会一直的等待,那么方法就阻塞在这了,永远不会执行。
		InputStream inputStream = connection.getInputStream();
		//把流转换成实体
		return UpdataInfoParse.parseXml(inputStream);
}
原来把设置超时方法的方法给写错了。

所有的各种ListView,GridView等,都是一样的,它们都是一个独立的布局,里面不过是那些相同的item,
所以我们还需要一个item.xml的布局,然后把这个item用inflate吹起来,返回一个整体的View对象。


android:gravity
 

设置此组件中的内容在组件中的位置。
可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、
fill_horizontal、center、fill、clip_vertical 可以多选,
用“|”分开。关联方法:setGravity (int gravity)

用XML画一些基本图形:
这是画一个正文形,下面是对这个正文形的一些作用。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"
    >
    <!-- 描边 -->  
	<stroke 
	    android:width="0.5dip"
	    android:color="#ff505050"
	    />
	 <!-- 圆角 --> 
	    <corners android:radius="2dip" >
    </corners>
	
	<gradient 
	    android:startColor="#ff404040"
	    android:centerColor="#ff383838"
	    android:endColor="#ff404040"
	    />
</shape>
 
 操,原来图片那么好看,全部是依赖于背景图片呀。
 
 
 android:theme="@android:style/Theme.NoTitleBar"
 
 手机防盗界面不显示 ,通过拨某个电话号码去实现。
 
 如果你在广播接收者和服务里面去开启一个activity的时间
 因为广播接收者和服务没有任务栈,所以要显式的指定。
 
 不能通过abortBroad因为通话调用发送广播的方法是带有
 接收者API,这个方法 不能被abortBroad结束,要用setResult(null)
 结束。
 
 让某个GridView的条目不显示。
 
SDK中所有的安卓的class文件和资源文件都是在一个叫android.jar的包中。
D:\android-sdk-windows\platforms\android-8

想要对电话进行一些控制:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
允许应用监督、限定或终止呼出的电话

E/AndroidRuntime(1227): 
java.lang.RuntimeException: Unable to start receiver cn.itcast.mobilesafe.receiver.CallPhoneReceiver: 
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  
context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
在任务栈外面不能开启一个activity,因为activity是运行在任务栈里面的,所以在服务和广播接收者里面想要
启动一个必须要指定一个东西,
//凡是想要在广播接收者或者服务里面启动一个Intent,就是在创建一个新的Task任务
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

开始自定义弹出窗,其实就是继承,然后重写这个样式 。

//这将是最简单的一种方法,至此把XML转换成View对象已有三种方法
View view = View.inflate(this, R.layout.first_entry_dialog, null);
实现:
LayoutInflater factory = LayoutInflater.from(context);
return factory.inflate(resource, root);


 




【上篇】
【下篇】

抱歉!评论已关闭.