[英]Auto start an app when charging
我正在創建一個Android應用程序,我想在移動設備插入充電或插入耳機后立即自動啟動。 請提供有關如何操作的任何解決方案。
嘿,我准備一個電池充電的演示,試試吧。
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.logistic.test1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Test1Activity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".PowerConnectionReceiver" >
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
<class android:name=".PowerConnectionReceiver">
</class>
</application>
</manifest>
PowerConnectionReceiver
package com.logistic.test1;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.widget.Toast;
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isCharging = false;
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
if(status == 2)
isCharging = true;
//boolean isCharging = status == BatteryManager.BATTERY_PLUGGED_AC ||
// status == BatteryManager.BATTERY_PLUGGED_USB;
//BATTERY_STATUS_CHARGING;
// || status == BatteryManager.BATTERY_STATUS_FULL;
/*
* int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,
* -1); boolean usbCharge = chargePlug ==
* BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug ==
* BatteryManager.BATTERY_PLUGGED_AC;
*/
Toast.makeText(context, "Status : "+status+"\nCharging : "+isCharging, Toast.LENGTH_SHORT).show();
}
}
Test1Activity.java
package com.logistic.test1;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class Test1Activity extends Activity {
TextView tv1, tv2;
PowerConnectionReceiver pcr, pcr2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onStart() {
super.onStart();
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, ifilter);
pcr = new PowerConnectionReceiver();
pcr.onReceive(getApplicationContext(), batteryStatus);
}
@Override
public void onStop() {
super.onStop();
try {
unregisterReceiver(pcr);
} catch(IllegalStateException e) {
e.printStackTrace();
}
}
@Override
public void onResume() {
super.onResume();
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter);
pcr2 = new PowerConnectionReceiver();
pcr2.onReceive(getApplicationContext(), batteryStatus);
}
@Override
public void onPause() {
super.onPause();
try {
unregisterReceiver(pcr2);
} catch(IllegalStateException e) {
e.printStackTrace();
}
}
private void showText(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
要檢測充電狀態,請使用BroadcastReceiver並在清單文件中注冊::
<receiver android:name=".broadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
和檢測耳機插入或不使用AudioManager.isWiredHeadsetOn()
看一下這個
http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
接收
<receiver android:name=".broadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
也收到
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
在你的清單中
對於遇到相同問題的任何人: 檢測正在插入的設備
我也發現了這個其他網站 ,這對我幫助很大 !
像這樣:
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
然后:
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
if (batteryStatus != null) {
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float) scale;
}
}//end onReceive
}//end PowerConnectionReceiver
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.