简体   繁体   English

如何在主屏幕中显示浮动图标

[英]How To Display A Floating Icon In Home Screen

I am building a lock screen app.我正在构建一个锁屏应用程序。 I want to place a floating icon on Homescreen, which when clicked will lock the phone.我想在主屏幕上放置一个浮动图标,点击后会锁定手机。 I was able to implement the functionality of Locking the Phone using Device Manager API.我能够使用设备管理器 API 实现锁定电话的功能。 Now I want to add a Floating Icon on Homescreen.现在我想在主屏幕上添加一个浮动图标。

I tried using the solution recommended here: What APIs are used to draw over other apps (like Facebook's Chat Heads)?我尝试使用这里推荐的解决方案: 哪些 API 用于绘制其他应用程序(如 Facebook 的聊天头)?

But this does not seem to be working in my case.但这对我来说似乎不起作用。 It is not diplaying an icon on the homescreen ever after gaining SYSTEM OVERLAY Permission.获得 SYSTEM OVERLAY 权限后,它不会在主屏幕上显示图标。

LockButtonService.java锁按钮服务.java

public class LockButtonService extends Service {

    private WindowManager windowManager;
    private ImageView chatHead;

    @Override public IBinder onBind(Intent intent) {
        // Not used
        return null;
    }

    @Override public void onCreate() {
        super.onCreate();

        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        chatHead = new ImageView(this);
        chatHead.setImageResource(R.drawable.lock);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.TOP | Gravity.LEFT;
        params.x = 0;
        params.y = 100;

        windowManager.addView(chatHead, params);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (chatHead != null) windowManager.removeView(chatHead);
    }
}

MainActivity.java主活动.java

add_homescreen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Code For Adding Shortcut Icon On Home Screen
//                if (ShortcutManagerCompat.isRequestPinShortcutSupported(getApplicationContext())) {
//                    ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(getApplicationContext(), "#1")
//                            .setIntent(new Intent(getApplicationContext(), LockActivity.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
//                            .setShortLabel("Lock Screen")
//                            .setIcon(IconCompat.createWithResource(getApplicationContext(), R.drawable.lock))
//                            .build();
//                    ShortcutManagerCompat.requestPinShortcut(getApplicationContext(), shortcutInfo, null);
//                } else {
//                    Toast.makeText(MainActivity.this,"launcher does not support short cut icon",Toast.LENGTH_LONG).show();
//                }

                    //Code For Requesting System Overlay


                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (!Settings.canDrawOverlays(getApplicationContext())) {
                        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
                        startActivityForResult(intent, 12345);
                    }
                    else {
                        //Code To Execute If The Permission Is Granted
                        Toast.makeText(getApplicationContext(),"Permission Granted",Toast.LENGTH_LONG);
                       startService(new Intent(getApplicationContext(), LockButtonService.class));
                    }
                }




            }

I figured out the issue.我想通了这个问题。 It seems like I forgot to declare this service in Android Manifest.好像我忘记在 Android Manifest 中声明这个服务了。 I was using WindowManager.LayoutParams.TYPE_PHONE in LockButtonService.java.我在 LockButtonService.java 中使用 WindowManager.LayoutParams.TYPE_PHONE。

I have now changed it into WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, and my icon is displaying on homescreen and all other activities.我现在已将其更改为 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,并且我的图标显示在主屏幕和所有其他活动上。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM