分享一下自己的笔记, android调用jni操作指示灯,android直接操作工作灯和电影灯 。
public native int onPowerLed(); //开电源灯
public native int offPowerLed();//关电源灯
public native int onWorkLed();//开工作灯
public native int offWorkLed();//关工作灯
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Window;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
// boolean battery = false;
private final int CLOSE_ALERTDIALOG = 0;
private int timecount = 0;
private int batteryValue = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
registerReceiver(batteryChangedReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
delayCloseController.timer.schedule(delayCloseController, 1500, 1000);
}
private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
Log.d(TAG, "----------level---" + level);
Log.d(TAG, "----------scale---" + scale);
Log.d(TAG, "----------Total---" + level * 100 / scale + "%");
batteryValue = level * 100 / scale;
}
}
};
@Override
protected void onDestroy() {
MainActivity.this.unregisterReceiver(batteryChangedReceiver);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case CLOSE_ALERTDIALOG: {
if (timecount % 2 == 1) {
if (batteryValue <= 15) {
onPowerLed();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
offPowerLed();
Log.d(TAG, "------PowerLed------");
}
} else {
onWorkLed();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
offWorkLed();
Log.d(TAG, "------WorkLed------");
}
}
timecount++;
break;
default:
break;
}
}
};
private class DelayCloseController extends TimerTask {
private Timer timer = new Timer();
@Override
public void run() {
Message messageFinish = new Message();
messageFinish.what = CLOSE_ALERTDIALOG;
mHandler.sendMessage(messageFinish);
}
}
private DelayCloseController delayCloseController = new DelayCloseController();
static {
System.loadLibrary("ledctl-jni");
}
public native int onPowerLed();
public native int offPowerLed();
public native int onWorkLed();
public native int offWorkLed();
}
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Window;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
//boolean battery = false;
private final int CLOSE_ALERTDIALOG = 0;
private int timecount = 0;
private int batteryValue = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
new Thread() {
public void run() {
registerReceiver(batteryChangedReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}
}.start();
new Thread() {
public void run() {
setWorkLed();
}
}.start();
}
private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
Log.d(TAG, "----------level---" + level);
Log.d(TAG, "----------scale---" + scale);
Log.d(TAG, "----------Total---" + level * 100 / scale + "%");
setPowerLed(level * 100 / scale);
}
}
};
@Override
protected void onDestroy() {
MainActivity.this.unregisterReceiver(batteryChangedReceiver);
}
private void setWorkLed() {
while (true) {
try {
onWorkLed();
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
offWorkLed();
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void setPowerLed(int batteryValue) {
if (batteryValue <= 20) {
while (true) {
try {
onPowerLed();
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
offPowerLed();
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static {
System.loadLibrary("ledctl-jni");
}
public native int onPowerLed();
public native int offPowerLed();
public native int onWorkLed();
public native int offWorkLed();
}