版本号,json解析,安装apk,签名,无标题栏,滚动Textview,自定义组合控件

1.获得应用程序的当前版本号

PackageManager pm = getPackageManager();

PackageInfo info = pm.getPackageInfo(getPackageName(),0);

String versionName = info.versionName;


2.联网到服务器中获取最新应用程序的版本号服务器的路径应该写在配置文件中,方便以后可能的修改:

在values路径下新建一个config.xml文件,Add一个Name为serverurl,Value为http://192.168.0.16/updateinfo.html的键值对,保存。

取的时候用:

URL url = new URL(getString(R.string.serverurl));


3.json解析

JSONObject obj = new JSONObject(result);

String version = obj.getString("version");


4.跳转后,登陆界面一定要关闭,要不然返回键能够返回登陆界面。。。多没技术含量。


5.调用系统安装工具安装apk,系统安装apk的界面是一个Activity,所以,在系统的清单文件中有这个Activity的配置信息,可以根据系统清单文件中的配置信息来调用这个Activity。

Intent intent = new Intent();

intent.setAction("android.intent.action.INSTALL_PACKAGE");

intent.addCategory("android.intent.category.DEFAULT");

intent.setDataAndType(Uri.fromFile(t),"application/vnd.android.package-archive");

startActivity(intent);


6.apk签名

在Android手机中不允许有两个应用程序有相同的包名。如果包名相同的情况下,系统会去检查这两个应用的签名是否相同,如果相同,会覆盖之前安装的应用,若不同,则安装失败。

签名步骤:右键应用程序-->Export-->Export Android Application-->Create new keystore-->Location:浏览出要保存的路径,创建要保存的文件,如mobilesafe.keystore-->Password-->Alias:别名、Validity写40-->保存。

经过签名的apk可以发布到应用市场上。


7.设置应用中所有的Activity都没有标题栏,只需要在styles文件中的包含name="AppTheme"属性的style节点下添加<item name="android:windowNoTitle">true</item>


8.弹出对话框时,要么设置返回键不可用(builder.setCancelable(false);)要么监听返回键被点击的事件(builder.setOnCancelListener(new OnCancelListener(){});)。


9.九宫格用GridView,android:numColumns="3"即可。


10.自定义滚动的TextView

当TextView中的内容单行显示不完的时候,ellipsize属性值为start、middle、end时,省略号分别出现在前中后必须,为marquee时,当TextView获取焦点时,文本内容会滚动。要想使TextView一直有焦点,需定义一个FocusedTextView类继承TextView,实现3个构造函数。重写isFocused()方法,不管是否有焦点都直接返回true。然后以该类的全路径名来定义控件。如:

<span style="font-size:18px;"><com.uc.mobilesafe.ui.FocusedTextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:text="史上最新手机安全卫士,绝对保证您手机的安全,欢迎下载!"
    android:textSize="18sp" /></span>

11.自定义组合控件

自己写的控件组合,以后还要用的话,可以写一个类如SettingItemView继承RelativeLayout,实现3个构造方法,3个构造方法都调用initView(context)方法,创建initView()方法,在该方法中,用:

View.inflate(context,R.layout.布局文件,this);把一个布局文件转换成View对象,并加载到父类(SettingItemView)中。然后就可以通过该类的全路径名定义该组合控件。一次定义,重复利用。

点击组合控件的每个位置都使组合控件中的checkbox起作用:

<span style="font-size:18px;">	/**
	 * 初始化布局文件
	 * 
	 * @param context
	 */
	private void initView(Context context) {
		// 把一个布局文件--->View,并且加载到父类SettingItemView中
		View.inflate(context, R.layout.setting_item_view, this);
		cb_update = (CheckBox) findViewById(R.id.cb_update);
		tv_name = (TextView) findViewById(R.id.tv_name);
		tv_desc = (TextView) findViewById(R.id.tv_desc);

	}

	/**
	 * 设置组合控件是否被选中
	 */
	public void setChecked(boolean checked) {
		cb_update.setChecked(checked);
	}

	/**
	 * 校验组合控件是否被选中
	 * 
	 * @return
	 */
	public boolean isChecked() {
		return cb_update.isChecked();
	}

	/**
	 * 设置组合控件的描述信息
	 * 
	 * @param description
	 */
	public void setDesc(String description) {
		tv_desc.setText(description);
	}</span>

这里设置是否被选中是为了在处理点击事件时做出相应的响应。

还有,组合控件绑定时,checkbox要做处理

android:clickable="false"

android:focusable="false"

你可能感兴趣的:(版本号,json解析,安装apk,签名,无标题栏,滚动Textview,自定义组合控件)