android TIPS小结

1 APP下载自动升级的方法
当我们的APP升级到新版本时,一般采用的方法就是程序检测服务器上的版本,如果比当

前版本更新,则下载服务器上的版本,然后安装。这里就不讨论下载的过程了,如果不会

请参考之前的文章 Android文件下载进度条的实现,这里只讨论下载完后执行安装的操作


首先,安装程序需要特殊权限。打开AndroidMenifest.xml,在</application>后、

</manifest>之前加上后面的代码: <uses-permission android:name=”

android.permission.INSTALL_PACKAGES” />,这样你的APP就有安装软件权限了。
接下是安装的关键代码,下载完后执行:

Uri uri = Uri.fromFile(new File("/sdcard/temp.apk")); //这里是APK路径
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"application/vnd.android.package-archive");
startActivity(intent);

2实现开机自启动

,我们只需要监听一个开机启动的Broadcast(广播)即可。首先写一个Receiver(即广播

监听器),继承BroadcastReceiver,如下所示:

public class BootReceiver extends BroadcastReceiver {
private PendingIntent mAlarmSender;
@Override
public void onReceive(Context context, Intent intent) {
// 在这里干你想干的事(启动一个Service,Activity等),本例是启

动一个定时调度程序,每30分钟启动一个Service去更新数据
mAlarmSender = PendingIntent.getService(context, 0, new Intent

(context,
RefreshDataService.class), 0);
long firstTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context
.getSystemService(Activity.ALARM_SERVICE);
am.cancel(mAlarmSender);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,

firstTime,
30 * 60 * 1000, mAlarmSender);
}
}
<RECEIVER android:name=".service.BootReceiver">
<INTENT-FILTER>
<!-- 系统启动完成后会调用-->
<ACTION android:name="android.intent.action.BOOT_COMPLETED">
</ACTION>
</INTENT-FILTER>
</RECEIVER>


3 调用系统发短信
Uri smsToUri = Uri.parse("smsto:10086");
Intent intent = new Intent(

android.content.Intent.ACTION_SENDTO, smsToUri );
intent.putExtra("sms_body", "这是内容");
startActivity( intent );

4 检查SD卡是否可用
if (Environment.getExternalStorageState().equals

(Environment.MEDIA_MOUNTED)) {
setTitle("SD可用");
}else {
setTitle("SD不可用");
}

5 读取手机序列号IMEI,SIM序列号IMSI方法
IMEI是国际移动设备身份码的缩写,每台手机都有一个唯一的IMEI号码(貌似有国产山

寨机用同一个IMEI)。IMSI是国际移动用户识别码缩写,每张SIM卡都有唯一的一个IMSI号

码。因为他们都是唯一的,有些时候我们可以用他们来识别用户身份,不用再输帐号登录

(这样一来,没有IMEI和IMSI的android MP4,平板电脑就用不了了),以下是读取方法:

TelephonyManager tm = (TelephonyManager) this.getSystemService

(Context.TELEPHONY_SERVICE);
String imei = tm.getDeviceId();
String imsi =tm.getSubscriberId();

6 禁止切换横竖屏

Android系统在开启自动切换横竖屏的情况下,转动手机就会自动切换横竖屏,或者在推开

键盘时也会自动切换到横屏。但是有时我们的程序只针对竖屏做了优化,在横屏时显示就

会乱,影响用户体验,所以我们必须禁止系统自动切换。要达到这个目标,其实很简单。


在AndroidManifest.xml中,所有的Activity标签都加上android:screenOrientation属性

,横屏值为landscape,竖屏值为portrait。这样基本实现了锁定横屏或竖屏,但是在一些

有侧滑键盘的手机上(比如说我的Milestone),推开键盘的时候,Activity会自动重启,

要避免在这种情况下重启Activity,可以在androidmanifest.xml文件中的每个activity加

上android:configChanges=”keyboardHidden|orientation”属性,然后重写

onConfigurationChanged方法

Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
}

不过,这样载入的只是main.xml默认设置,如果在程序代码中修改过布局(改过TextView

的Text之类),是不会显示修改后的结果的。

7 在应用程序级别使用变量
Android应用程序开发中,有的时候我们在应用程序的任何一个地方都需要访问一个全

局变量,也就是在任何一个Activity中都可以访问的变量。它不会因为Activity的生命周

期结束而消失。要实现应用程序级的变量,我们可以通过Application这个类来实现。 首

先,我们新建一个类HelloApplication继承Android.app.Application类,然后在我们的类

中增加一些变量。如下所示:

public class HelloApplication extends Application {
private int globalVariable=1;

public int getGlobalVariable() {
return globalVariable;
}

public void setGlobalVariable(int globalVariable) {
this.globalVariable = globalVariable;
}
}
完成之后,我们在应用程序的任何一个Activity中可以通过如下方法访问我们的变量:

((HelloApplication)getApplication()).setGlobalVariable(10);
int valiable=((HelloApplication)getApplication()).getGlobalVariable();
public class DataStoreClass {
private static int globalVariable=1;

public static int getGlobalVariable() {
return globalVariable;
}

public static void setGlobalVariable(int newGlobalVariable) {
globalVariable = newGlobalVariable;
}
}

8
ANDROID的style:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
应用
<TextView
style="@style/CodeFont"
android:text="@string/hello" />


9 android标题栏(titlebar)显示进度条
在后台线程中执行各种操作(网络连接、大数据存储)的时候,我们希望让客户能看到

后台有操作在进行,那么既能有效的提示用户,又不占用当前操作空间,最好的方法就是

在标题栏有个进度条。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//

先给Activity注册界面进度条功能
setContentView(R.layout.main);
setProgressBarIndeterminateVisibility(true);//在需要显示进度条

的时候调用这个方法
setProgressBarIndeterminateVisibility(false);//在不需要显示进度

条的时候调用这个方法
}

10 自定义一个控件,比如可以修改一个textview,步骤如下:
1 首先继承edittext类
public class NeverEdit extends EditText {

/*构造方法-1*/
public NeverEdit(Context context) {
super(context);
}

/*构造方法-2:用XML布局需要此构造方法*/
public NeverEdit(Context context, AttributeSet attrs) {
super(context, attrs);
}

/*重新实现对按键安下事件处理*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

/*什么都不做*/

/*
* 返回真表示已经处理此事件
*/
return false;
}

2 在布局文件中
<com.NeverEdit
android:id="@+id/neveredit"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/append"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加" />
<Button
android:id="@+id/clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清除" />

3 主文件中
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ch4ex13);
/*获得实例变量以操作*/
appendBtn = (Button)findViewById(R.id.append);
clearBtn = (Button)findViewById(R.id.clear);
toBeEdited = (NeverEdit)findViewById(R.id.neveredit);
/*实现单击事件监听接口*/
btnClick = new OnClickListener() {

public void onClick(View v) {
if (v == appendBtn) {
/*若触发的View是添加按钮时,给NeverEdit添加字符串*/
toBeEdited.append("Android");
} else if (v == clearBtn) {
/*若触发的View是清除按钮时,清空NeverEdit*/
toBeEdited.getText().clear();
} else {
/*若触发的View是其他的话什么也不做*/
}
}

};
/*设置单击事件监听接口*/
appendBtn.setOnClickListener(btnClick);
clearBtn.setOnClickListener(btnClick);

结果就是编辑框不能被编辑了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值