我已经创建了android应用程序,如果usb连接到pc或者将文本“充电器”设置为textview,如果usb连接到充电器,则将文本“mtp”设置为textview。我使用broadcastreceiver进行usb电缆检测! 当我在手机上运行应用程序并将usb线连接到电脑或充电器时,没有任何反应只打印出来!问题出在哪里?
public class Receiver extends BroadcastReceiver
{
Intent intent;
@Override
public void onReceive(Context context, Intent intent)
{
intent = new Intent("check");
if(intent.getAction().equalsIgnoreCase("android.hardware.usb.action.USB_STATE"))
{
intent.putExtra("MTP", true);
context.sendBroadcast(intent);
}
else if (intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED"))
{
intent.putExtra("isChargerConnected", true);
context.sendBroadcast(intent);
}
else
{
intent.putExtra("isCableConnected", false);
context.sendBroadcast(intent);
}
}
}
public class MainActivity extends AppCompatActivity
{
private TextView cable;
BroadcastReceiver broadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cable = (TextView) findViewById(R.id.cable);
broadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent != null && intent.getAction().equals("check"))
{
Bundle bundle = intent.getExtras();
if (bundle != null && bundle.containsKey("MTP"))
{
boolean isUSBConnected = bundle.getBoolean("MTP");
if(isUSBConnected)
cable.setText("MTP");
}
if (bundle != null && bundle.containsKey("isChargerConnected"))
{
boolean isChargerConnected = bundle.getBoolean("isChargerConnected");
if(isChargerConnected)
cable.setText("Charger");
}
if (bundle != null && bundle.containsKey("isCableConnected"))
{
boolean isCableConnected = bundle.getBoolean("isCableConnected");
if(!isCableConnected)
cable.setText("None");
}
}
}
};
IntentFilter intentFilter = new IntentFilter("check");
registerReceiver(broadcastReceiver, intentFilter);
}
<receiver android:name=".Receiver">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_STATE"/>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
</intent-filter>
</receiver>
答案 0 :(得分:0)
你可以试试这段代码
<activity
...
android:launchMode="singleTask">
和
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED))
{
UsbDevice device =
(UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
答案 1 :(得分:0)
首先,使用以下代码检查设备是否正在充电(USB或AC):
public boolean isDeviceCharging(){
return myBatteryManager.isCharging();
}
然后使用以下代码检查USB已连接或AC充电器:
public boolean checkUSB(){
Intent intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE"));
return intent.getExtras().getBoolean("connected");
}
private boolean checkACCharger()
{
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
chargePercentage = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
return acCharge;
}
您还可以使用以下功能获取电池充电百分比:
public int getBatteryCharge() {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
return level;
}
PS:BatteryManager.isCharging()方法可用于API级别23以后