Skip to content

Apk应用开发

名人名言:生而富者骄,生而贵者傲

定时执行任务

  • Handler与线程sleep方法实现,JAVA方式不推荐
java
public class Task {
	Handler handler = new Handler() {
	    public void handleMessage(Message msg) {
	        // 需要完成的任务或事情
	        super.handleMessage(msg);
	    }
	};
	public void initDema() {
		new Thread(new MyThread()).start();
	}
	public class MyThread implements Runnable {
	    @Override
	    public void run() {
	        while (true) {
	            try {
	                Thread.sleep(10000);	//线程暂停10秒,单位毫秒
	                Message message = new Message();
	                message.what = 1;
	                handler.sendMessage(message);	//发送消息
	            } catch (InterruptedException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	}
}
  • Handler的postDelayed方法,最简单的方式实现推荐
java
public class Task {
	Handler handler = new Handler();
	Runnable runnable = new Runnable() {
	    public void run() {
	    	// 需要完成的任务或事情
	        handler.postDelayed(this, 2000);
	    }
	};
	public void initDema() {
		handler.removeCallbacks(runnable);		//停止任务
		handler.postDelayed(runnable, 2000);	//每两秒执行一次
	}
}
  • Handler与timer及TimerTask结合方式,比较多的任务推荐
java
public class Task {
	private Timer timer = new Timer();
	private TimerTask task;
	Handler handler = new Handler() {
	    public void handleMessage(Message msg) {
	    	// 需要完成的任务或事情
	        super.handleMessage(msg);
	    }
	};
	public void initDema() {
		task = new TimerTask() {
		    public void run() {
		        // TODO Auto-generated method stub
		        Message message = new Message();
		        message.what = 1;
		        handler.sendMessage(message);
		    }
		}; 
		timer.cancel();		//停止任务
		timer.schedule(task, 2000, 2000);	//启动定时器
	}
}

ActionBar

java
public void initBar() {
	getActionBar().show();	//显示
	getActionBar().hide();	//隐藏 还可以通过主题Theme.Holo.NoActionBar隐藏
	getActionBar().setDisplayHomeAsUpEnabled(true);  //增加返回按钮
}
public boolean onCreateOptionsMenu(Menu menu) {  
	MenuInflater inflater = getMenuInflater();  
	inflater.inflate(R.menu.main, menu);  //通过main.xml自定义按钮样式也可增加SearchView
	return super.onCreateOptionsMenu(menu);  
} 
public boolean onOptionsItemSelected(MenuItem item) {  
	switch (item.getItemId()) {  //对应main.xml按钮点击事件
	case R.id.action_ok:  
		Toast.makeText(this, "Compose", Toast.LENGTH_SHORT).show();  
		return true;  
	default:  
		return super.onOptionsItemSelected(item);  
	}  
}

多形式弹窗

java
public void demo() {
	String[] item = new String[]{ "Item1", "Item2" };
	AlertDialog.Builder builder = new AlertDialog.Builder(this);
	builder.setTitle("我是标题");
	builder.setMessage("我是消息提示!");				//设置列表时需屏蔽消息提示
	//builder.setItems(item, null);						//列表Arg:items ClickListener
	//builder.setView(new EditText(this));				//自定义View简单演示编辑框,可使用LayoutInflater.from(this).inflate扩展
	//builder.setMultiChoiceItems(item, null, null);	//多选列表Arg:items checkedItems ClickListener
	//builder.setSingleChoiceItems(item, 0, null);		//单选列表Arg:items checkedItems ClickListener
	builder.setIcon(R.drawable.music);					//ICON
	builder.setNegativeButton("取消按钮", null);		
	//builder.setNeutralButton("中间按钮", null);
	builder.setPositiveButton("确定按钮", new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
			/*	ClickListener  Close  */
			dialog.dismiss();
		}
	});
	builder.create().show();		//创建显示
}

获取内存

  • 读取/proc/meminfo实现、第一行为总内存
  • /proc/cpuinfo为Cpu信息、版本/proc/version
java
public void getTotalMemory() {
	String str = "";  
	try {  
		FileReader fr = new FileReader("/proc/meminfo");
		BufferedReader bfReader = new BufferedReader(fr, 8192);
		/*	Single line Read	
		String[] list = bfReader.readLine().split("\\s+");
		for (String item : list) Log.i(TAG, "--->" + item);
		*/
		while ((str = bfReader.readLine()) != null) {
			Log.i(TAG, "--->" + str);
		}
	} catch (IOException e) {
	}
}
  • 通过ActivityManager服务获取内存
java
public void getAvailMemory() {
	ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
	ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();  
	am.getMemoryInfo(mi);  
	Log.i(TAG, "--->" + mi.availMem);  
}

获取ROM大小

java
public void getRomMemroy() {
	/* 
	* Sdcard If there is any
	* Environment.getExternalStorageDirectory()
	*/
	File path = Environment.getDataDirectory();  
	StatFs stat = new StatFs(path.getPath());  
	long blockSize = stat.getBlockSize();  
	long totalBlocks = stat.getBlockCount();  
	long size = totalBlocks * blockSize;   
	Log.i(TAG, "--->" + size);
	long availableBlocks = stat.getAvailableBlocks();
	long availableSize = blockSize * availableBlocks;
	Log.i(TAG, "--->" + availableSize);
}

电池电量

java
public void init() {
	registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private BroadcastReceiver batteryReceiver = new BroadcastReceiver(){  
	public void onReceive(Context context, Intent intent) {  
		int level = intent.getIntExtra("level", 0);
		Log.i(TAG, "--->" + level + "%");
	}  
};

获取Mac地址

java
public void getWifiMacInfo(){  
	WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
	WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
	if (wifiInfo.getMacAddress() != null) Log.i(TAG, "--->" + wifiInfo.getMacAddress());  
}

开机时间

java
private void getTimes() {  
	long ut = SystemClock.elapsedRealtime() / 1000;  
	if (ut == 0) ut = 1;
	int m = (int) ((ut / 60) % 60);  
	int h = (int) ((ut / 3600));  
	Log.i(TAG, "--->" + h + "h:" + m);  
}

shape使用

  • shape用于设定形状,可以在selector,layout等里面使用,有6个属性
xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 圆角=左上角=右上角=左下角=右下角=radius为所有角不可同时设置-->
    <corners android:radius="9dp" android:topLeftRadius="2dp" android:topRightRadius="2dp" android:bottomLeftRadius="2dp" android:bottomRightRadius="2dp"/>
    <!-- 渐变 -->
    <gradient android:useLevel="true" android:angle="45" android:type="radial" android:centerX="0" android:centerY="0"
        android:startColor="@android:color/white"
        android:centerColor="@android:color/black"
        android:endColor="@android:color/black"
        android:gradientRadius="90" />
    <!-- 间隔->各方向的间隔  -->
    <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp" />
    <!-- 大小->宽度和高度 -->
    <size android:width="50dp" android:height="50dp" />
    <!-- 填充->填充的颜色 -->
    <solid android:color="@android:color/white" />
    <!-- 描边->dashWidth虚线宽度dashGap虚线间隔宽度#任意一个设置为0则实心-->
    <stroke android:width="2dp" android:color="@android:color/black" android:dashWidth="1dp" android:dashGap="2dp"/>
</shape>

Android超链接

  • 方式一
xml
android:autoLink="web"
android:autoLink="all"		#TextView添加
  • 方式二
xml
<string name="str_link">百度:<a href="http://m.baidu.com">点击跳转</a></string>
  • 方式三
java
tv.setText(Html.fromHtml("百度:" + "<a href='http://m.baidu.com'>点击跳转</a> "));
tv.setMovementMethod(LinkMovementMethod.getInstance());
  • 方式四
java
SpannableString ss = new SpannableString("百度: 点击跳转");
ss.setSpan(new URLSpan("http://m.baidu.com"), 5, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //5-9
tv.setText(ss);
tv.setMovementMethod(LinkMovementMethod.getInstance());
  • Spannable富文本
java
SpannableString ss = new SpannableString("demo text");
ss.setSpan(AbsoluteSizeSpan(size), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);			#text size
ss.setSpan(ForegroundColorSpan(color), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);		#text Color
ss.setSpan(BackgroundColorSpan(color), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);		#text bgColor
ss.setSpan(TextAppearanceSpan(this, R.style.TextStyle), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(UnderlineSpan(), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);			#Under line
ss.setSpan(SuperscriptSpan(), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);			#Superscript
ss.setSpan(SubscriptSpan(), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);			#Subscript

Android悬浮窗

注意权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

java
public class FxService {

    private WindowManager.LayoutParams wmParams;
    private WindowManager mWindowManager; //创建浮动窗口设置布局参数的对象
	private static final String TAG = "FxService";

	private void createFloatView(Context mContext) {
		wmParams = new WindowManager.LayoutParams();	//获取WINDOW_SERVICE
		mWindowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);		
		Log.i(TAG, "mWindowManager--->" + mWindowManager);								
		wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;	//设置window type
        wmParams.format = PixelFormat.RGBA_8888;				//设置图片格式,效果为背景透明
        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;  //设置浮动窗口不可聚焦    
        wmParams.gravity = Gravity.LEFT | Gravity.TOP;   //调整悬浮窗显示的停靠位置为左侧置顶    
        wmParams.x = 0;
        wmParams.y = 0; 	// 以屏幕左上角为原点,设置x、y初始值,相对于gravity
        wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;	//设置悬浮窗口长宽数据
        wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
		/* 设置悬浮窗口长宽数据
        wmParams.width = 200;
        wmParams.height = 80;
        */
        /*
        LayoutInflater inflater = LayoutInflater.from(mContext);	//获取浮动窗口视图所在布局
        mFloatLayout = (LinearLayout) inflater.inflate(R.layout.float_layout, null);
		mFloatView = (Button)mFloatLayout.findViewById(R.id.float_id);
        mFloatView.setOnTouchListener(null);						//浮动窗口按钮点击事件与触摸事件
        mFloatView.setOnClickListener(null;)
		*/
        mWindowManager.addView(mFloatLayout, wmParams);
	
	}
}

Copyright © manosP . 2023