android 锁屏上显示Activity或者在其他应用app或者手机桌面弹activity,类似微信手机登录电脑

首先这个是弹activity不是部分透明对话框,也不是悬浮窗,所以不要纠结权限问题,当然如果是对话框或者悬浮框不是这么容易和简单的,需要权限不说,也不一定能适配所有的手机

只看例子,在MainActivity启动TestActivity,中间10秒你回到桌面或者进入任何其它app或者锁屏都是可以唤醒进入想要的页面,例如微信的手机登录电脑页面

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Handler().postDelayed(new Runnable() {
            public void run() {

                Intent in = new Intent(MainActivity.this, TestActivity.class);
                startActivity(in);

            }
        },  10000);

    }
}

对应的布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="#ffffff">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <ImageButton
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:background="#000000"/>

</android.support.constraint.ConstraintLayout>
public class TestActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        setContentView(R.layout.activity_test);
    }
}

注意这里的FLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON,从名字上就能看出其作用。FLAG_TURN_SCREEN_ON使Activity启动的时候能够点亮屏幕。FLAG_SHOW_WHEN_LOCKED能够在屏幕锁定的时候,也能显示,如果只是想在桌面或者其它app页面弹activity的话,那么去掉这个就可以了

对应的布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".TestActivity"
    android:background="#ff0505">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TEST Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

对应的主题,我试过不用这个主题也是可以的

<style name="FullScreenTheme" parent="android:Theme.Light">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
</style>
<style name="noTitle_Translucent_Theme" parent="android:Theme.Light">
    <item name="android:windowNoTitle">true</item>
</style>

经过上面案列测试说明,当前自己的应用置于后台的话,可以在任何界面如桌面或者任意app类,或者锁屏状态都可以切换到想要显示的activity的,注意是activity全屏页面,如果是部分对话框页面或者悬浮框的话,是不可能这么容易的,就算是activity模式的diallog对话框也如果这样搞的话,就是对话框在上面,同时也能看到对话框下面的应用的页面了,就是你自己的应用,这种启动就是将你的自己的应用切换调换到最上端,如果只是想要显示一个对话框页面的话,那是不可能的

在其他应用显示的activity模式dialog的页面如下:其实就是唤醒你自己的应用而已

上图测试案例

public class TestActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        setContentView(R.layout.activity_message_dialog);
    }
}

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#b2000000">
       <LinearLayout 
           android:layout_width="324dp"
           android:layout_height="363dp"
           android:orientation="vertical"
           android:layout_centerInParent="true"
           android:background="#ffffff">
            <ImageView 
              android:layout_width="match_parent" 
              android:layout_height="114dp"
              android:scaleType="fitXY"
              android:src="#ed5002"/>
            
            <TextView 
                android:id="@+id/titleView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:textColor="#000000"
                android:textSize="16sp"
                android:gravity="center_horizontal"
                android:singleLine="true"
                android:ellipsize="end"/>
            
             <TextView 
                android:id="@+id/messageView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:layout_marginTop="20dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:textColor="#3f3f3f"
                android:textSize="12sp"
                android:scrollbars="vertical"
                android:lineSpacingExtra="9dp"/>

           <TextView 
                android:id="@+id/button"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_marginTop="20dp"
                android:layout_marginBottom="11dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:gravity="center"
                android:text="我知道了"
                android:textColor="#00e4ff"
                android:textSize="16sp"
                android:background="#000000"/>
       </LinearLayout>
</RelativeLayout>

清单文件

<activity
    android:name=".TestActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:theme="@style/public_notice_dialog_style" />

主题:

<!-- 公告弹窗 -->
<style name="public_notice_dialog_style">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowBackground">@drawable/public_notice_dialog_bg</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:windowAnimationStyle">@style/No_Animation</item>
</style>

<style name="No_Animation">
    <item name="android:activityOpenEnterAnimation">@null</item>
    <item name="android:activityOpenExitAnimation">@null</item>
    <item name="android:activityCloseEnterAnimation">@null</item>
    <item name="android:activityCloseExitAnimation">@null</item>
    <item name="android:taskOpenEnterAnimation">@null</item>
    <item name="android:taskOpenExitAnimation">@null</item>
    <item name="android:taskCloseEnterAnimation">@null</item>
    <item name="android:taskCloseExitAnimation">@null</item>
    <item name="android:taskToFrontEnterAnimation">@null</item>
    <item name="android:taskToFrontExitAnimation">@null</item>
    <item name="android:taskToBackEnterAnimation">@null</item>
    <item name="android:taskToBackExitAnimation">@null</item>
</style>

 

总结:经过上述案例测试,弹activity全屏页面可以在任何桌面或者app上显示,如微信手机登录电脑端页面,实际就是重新唤醒你的应用而已,但是如果只是想显示类似悬浮框或者部分弹框的页面,下面是桌面或者别人的应用页面,那种是很有难度的,不太可能实现的,就算实现了也需要手动设置或者获取一些权限

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值