目錄
開發背景
一、搭建環境
二、功能實作
1、思路簡單分析:
2、主要問題
三、展示
開發背景
好久沒有碰安卓了,由于自己一直記性不好,經常需要把壁紙改成將要完成的任務來提醒自己,(不選擇手機的備忘錄,是因為它不能一直顯示,對我來說不太滿意)于是,打算動手寫一個簡單APP,來滿足自己,
功能:可以輸入文字,可以定位在螢屏最上層,
這是最初功能,
一、搭建環境
今天是2021年12月31,編輯器選擇AndroidStudio3.0(官網最新)安裝很順暢,模擬器使用夜神,在安裝路徑下,執行cmd在
輸入
nox_adb.exe connect 127.0.0.1:62001

測驗成功

連接成功!
二、功能實作
在網上查詢資料,好像FloatingWindow可以實作類似的功能,
Floating view:可以懸浮在應用的各個頁面,floating view是放在一個單獨的window中, 對于每個app而言,它所在的window在floating view所在的window之下,這樣,就可以懸浮在其至上,window可以設定相應的層級,比如,通知欄,就是在一個級別很高的window中,
1、思路簡單分析:
1)用 EditText接收文本,點擊Button提交,觸發點擊事件
2)在點擊事件內獲取文本,通過Intent,傳入Service
3)在Service里取到對應的文本,送給FloatingWindow
4)撒花?????
2、主要問題
1)權限與請求的設定
在Manefest.xml檔案中宣告權限SYSTEM_ALERT_WINDOW
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2)設定里面對本應用進行設定懸浮窗權限,該權限在應用中需要啟動Settings.ACTION_MANAGE_OVERLAY_PERMISSION來讓用戶手動設定權限,
startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), REQUEST_CODE);
3)LayoutParam設定
LayoutParam里的type變數,指定視窗型別的,
在Android 8.0之前,懸浮視窗設定可以為TYPE_PHONE,提供用戶互動操作的非應用視窗,
在Android 8.0之后,如果需要實作在其他應用和視窗上方顯示提醒視窗,那么必須該為TYPE_APPLICATION_OVERLAY的新型別,
4)在Servie里獲取EditText內容
為了這里在showFloatingWindow() 函式里接收到輸入的文本,再給 showFloatingWindow()
借助了靜態變數Text傳遞,不太規范,但此應用自用,且體積尚小,后期再做優化,
public static String Text;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
showFloatingWindow();
String string = intent.getStringExtra("string1");
Log.v("MainActivity",string);
Text = string;
Log.v("MainActivity",string);
return super.onStartCommand(intent, flags, startId);
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void showFloatingWindow() {
// String string = Text;
// Log.v("MainActivity",string);
if (Settings.canDrawOverlays(this)) {
// editText=new EditText(getApplicationContext());
//Log.v("MainActivity",string);
button = new Button(getApplicationContext());
button.setText(Text);
button.setBackgroundColor(Color.WHITE);
windowManager.addView(button, layoutParams);
button.setOnTouchListener(new FloatingOnTouchListener());
}
}
5)顯示的不太對

經過一番測驗,發現
showFloatingWindow函式比onStartCommand函式先執行,

查看onStartCommand()函式,發現先呼叫了函式,其次才取值,修改位置,

完美
三、展示


暫更到這,2021年12月31日

需要原始碼,請關注公眾號“大魚海無糖”,回復:懸浮備忘錄

參考博文:
Android懸浮窗的實作_董小蟲的專欄-CSDN博客_android 懸浮窗
android中activity向service中傳值_illdvm_新浪博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/400595.html
標籤:其他
