在我的移动应用程序

时间:2017-10-27 21:09:23

标签: android usb

我已经创建了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>

2 个答案:

答案 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以后