Android 监听广播autoLauch 防止启动页面被多次启动(笔记)

直接上代码:
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());
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值