直接上代码:
1.监听USB插入的广播,这个广播自己插入android收usb是触发,当然我是监听自定义广播。
看下面manifest 配置,:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="come.lixby.autolaunchtest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.DEATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device" />
</activity>
<activity android:name=".MainActivity2"></activity>
</application>
</manifest>
这个是系统广播:
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.DEATTACHED" />
</intent-filter>
只接收usb插入广播,自定义:
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device" />
我自己device的id:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- FTDI Chips -->
<usb-device vendor-id="16981" product-id="0001"/>
</resources>
2.启动页面代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i("lixby","MainActivity isTaskRoot="+isTaskRoot());
Log.i("lixby","MainActivity taskId="+getTaskId());
//判断是不是任务栈中根启动页,防止监听到usb官博再次执行启动
//如果进到其他页面按Home键退出,插拔USB触发广播,此页面因接收到了广播会启动,而是不会显示之前前台的页面,但是经测试启动的PID和taskId并没有改变,还是之前第一次启动的。所以这里判断是不是根页面,不是就finish调,会将后台任务栈的栈顶Activity显示出来。
//原因:如果app没有kill调不管是手动按手机桌面ICON图标将任务回到前台还是接受广播回调将任务回到前台,APP是不会重新创建新的进程和任务的,原因自己Google或者百度AMS启动Activity原理。
if (!isTaskRoot()) {
super.onCreate(savedInstanceState);
finish();
return;
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i=new Intent(MainActivity.this,MainActivity2.class);
startActivity(i);
finish();
}
});
}
}
3.MainActivity2
package come.lixby.autolaunchtest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Log.i("lixby","MainActivity2 onCreate taskId="+getTaskId());
}
@Override
protected void onResume() {
super.onResume();
Log.i("lixby","MainActivity2 onResume taskId="+getTaskId());
}
}