android怎么得到powermanagerservice
这个是获取电量的android DEMO:
package comandroidbatterywaster;
import androidappActivity;
import androidcontentBroadcastReceiver;
import androidcontentContext;
import androidcontentIntent;
import androidcontentIntentFilter;
import androidosBatteryManager;
import androidosBundle;
import androidosPowerManager;
import androidviewView;
import androidwidgetCheckBox;
import androidwidgetTextView;
import javatextDateFormat;
import javautilDate;
/
So you thought sync used up your battery life
/
public class BatteryWaster extends Activity {
TextView mLog;
DateFormat mDateFormat;
IntentFilter mFilter;
PowerManagerWakeLock mWakeLock;
SpinThread mThread;
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
// Set the layout for this activity You can find it
// in res/layout/hello_activityxml
setContentView(Rlayoutmain);
findViewById(Ridcheckbox)setOnClickListener(mClickListener);
mLog = (TextView)findViewById(Ridlog);
mDateFormat = DateFormatgetInstance();
mFilter = new IntentFilter();
mFilteraddAction(IntentACTION_BATTERY_CHANGED);
mFilteraddAction(IntentACTION_BATTERY_LOW);
mFilteraddAction(IntentACTION_BATTERY_OKAY);
mFilteraddAction(IntentACTION_POWER_CONNECTED);
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
mWakeLock = pmnewWakeLock(PowerManagerFULL_WAKE_LOCK, "BatteryWaster");
mWakeLocksetReferenceCounted(false);
}
@Override
public void onPause() {
stopRunning();
}
ViewOnClickListener mClickListener = new ViewOnClickListener() {
public void onClick(View v) {
CheckBox checkbox = (CheckBox)v;
if (checkboxisChecked()) {
startRunning();
} else {
stopRunning();
}
}
};
void startRunning() {
log("Start");
registerReceiver(mReceiver, mFilter);
mWakeLockacquire();
if (mThread == null) {
mThread = new SpinThread();
mThreadstart();
}
}
void stopRunning() {
log("Stop");
unregisterReceiver(mReceiver);
mWakeLockrelease();
if (mThread != null) {
mThreadquit();
mThread = null;
}
}
void log(String s) {
mLogsetText(mLoggetText() + "\n" + mDateFormatformat(new Date()) + ": " + s);
}
BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intentgetAction();
String title = action;
int index = titlelastIndexOf('');
if (index >= 0) {
title = titlesubstring(index + 1);
}
if (IntentACTION_BATTERY_CHANGEDequals(action)) {
int level = intentgetIntExtra(BatteryManagerEXTRA_LEVEL, -1);
int icon = intentgetIntExtra(BatteryManagerEXTRA_ICON_SMALL,-1);
log(title + ": level=" + level + "\n" + "icon:" + icon);
} else {
log(title);
}
}
};
class SpinThread extends Thread {
private boolean mStop;
public void quit() {
synchronized (this) {
mStop = true;
}
}
这个文件夹在手机里……当然是废话,不过你想要看到这个文件夹直接连电脑是不行的,需要下载文件管理器安装到手机上,在手机上用这个软件就可以看到system这个文件夹了。很多都可以,最有名的当然是RE(root explorer)浏览器,楼主网上搜到处都有,找不到可以留下邮箱我发给你。
使用场景为:
配置环境变量:
问题:
环境变量配置完成后,重启 Android Studio, 运行 App 时,提示密码无效或错误。
原因就是未读取到环境变量。
解决方法:
Android中如何修改系统时间(应用程序获得系统权限)在android的API中有提供 SystemClocksetCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied "这个函数需要root权限或者运行与系统进程中才可以用。本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:1 在应用程序的AndroidManifestxml中的manifest节点中加入android:sharedUserId="androiduidsystem"这个属性。2 修改Androidmk文件,加入LOCAL_CERTIFICATE := platform这一行3 使用mm命令来编译,生成的apk就有修改系统时间的权限了。第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:1 同上,加入android:sharedUserId="androiduidsystem"这个属性。2 使用eclipse编译出apk文件,但是这个apk文件是不能用的。3 用压缩软件打开apk文件,删掉META-INF目录下的CERTSF和CERTRSA两个文件。4 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,首先找到密钥文件,在我的Android源码目录中的位置是"build argetproductsecurity",下面的platformpk8和platformx509pem两个文件。然后用Android提供的Signapk工具来签名,signapk的源代码是在"build oolssignapk"下,用法为"signapk platformx509pem platformpk8 inputapk outputapk",文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。这样最后得到的apk和第一个方法是一样的。最后解释一下原理,首先加入android:sharedUserId="androiduidsystem"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成androiduidsystem,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platformkey,就是上面第二个方法提到的platformpk8和platformx509pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到 platformpk8和platformx509pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android 中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package has no signatures that match those in shared user androiduidsystem",这样也是保护了系统的安全。最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。
以上就是关于android怎么得到powermanagerservice getsystemservicecontext.power全部的内容,包括:android怎么得到powermanagerservice getsystemservicecontext.power、安卓SYSTEM目录在哪里、Android Studio Gradle 中获取 System.getenv问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)