編輯:關於Android編程
最近在做行車記錄儀的事情,由於車載設備上的锂電池容量比較小,所以在停車熄火,保存數據後需要自動關機,由於Shutdown的權限不對普通應用開放,所以需要在源碼下編譯代碼。可以自己寫個BroadcastReceiver放到Setting源碼裡,也可以是獨立應用。
manifest節點需要聲明系統級uid:
android:sharedUserId=android.uid.system
以及關機權限:
以上這兩點在Setting的AndroidManifest裡都有,所以就不用我們手動添加了。
然後我在Application裡聲明了兩個全局變量,用來存儲當前的電源狀態和已經斷開電源的秒數:
/**
* 電源是否連接
*/
public static boolean isPowerConnect = true;
/**
* 電源斷開的秒數
*/
public static int OffSecond = 0;
接著就是PowerStateChangeReceiver:
package com.android.settings;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
public class PowerStateChangeReceiver extends BroadcastReceiver {
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (android.intent.action.ACTION_POWER_CONNECTED.equals(intent
.getAction())) {
Screenshot.isPowerConnect = true;
//Toast.makeText(context, CONNECTED, Toast.LENGTH_SHORT).show();
} else if (android.intent.action.ACTION_POWER_DISCONNECTED
.equals(intent.getAction())) {
Screenshot.isPowerConnect = false;
//Toast.makeText(context, DISCONNECTED, Toast.LENGTH_SHORT).show();
new Thread(new shutdownThread()).start();
}
}
/**
* Shutdown
*
* @param context
*/
public void shutdown(Context context) {
try {
Intent intent = new Intent(
android.intent.action.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(android.intent.extra.KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} catch (Exception e) {
}
Toast.makeText(context, context.getResources().getString(R.string.shutdown_now), Toast.LENGTH_SHORT).show();
}
public class shutdownThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
Message message = new Message();
message.what = 1;
shutdownHandler.sendMessage(message);
if (!Screenshot.isPowerConnect) {
Screenshot.OffSecond++;
} else {
Screenshot.OffSecond = 0;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
final Handler shutdownHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (Screenshot.OffSecond == 5
&& !Screenshot.isPowerConnect) {
shutdown(context);
}
break;
default:
break;
}
}
};
}
另外是在setting的AndroidManifest.xml對reveiver的聲明:
當我們直接在布局文件中寫三個listview的時候,會出現三個滾動條,並且每個listview都只顯示一個item,要改動才顯示更多。怎麼做才好了? 辦法是有得:用一
本文將告訴你如何讓你的應用程序支持各種不同屏幕大小,主要通過以下幾種辦法:讓你的布局能充分的自適應屏幕 根據屏幕的配置來加載合適的UI布局 確保正確的布局應用在正確的設備
自Android x86出來後,很多人開始在虛擬機上安裝繼續體驗,但是安裝並不是很簡單,隨之網上各種安裝教程就出現了,Virtualbox虛擬機下Andro
如圖,Android上新開的線程如想更新UI,需要重新跳到主線程中才能操作,以下是老外給出的幾種方案,大家多多學習下.private void loadIcon() {