رفتن به مطلب
  • 0

قفل کردن استاتوس و خطای ترسیم در اندروید جدید


salmana

سوال

قبلنا با لینک پایین راحت استاسو رو قفل میکردیم

https://www.b4x.com/android/forum/threads/disable-access-to-the-statusbar-notification-bar.49701/

در این لینک بالا کدهایی بصورت پایین قرار داده شده

#Region Code to disable access to the StatusBar
'Code translated by Erel:
'http://www.b4x.com/android/forum/threads/overlay-over-the-status_bar.49221/#post-309833
'Original source code:
'http://stackoverflow.com/questions/9815901/display-view-above-status-bar/25384365#25384365
Sub AddOverlay
Dim mView As Label
    mView.Initialize("")
    mView.Text = Sentence
    Dim mlp As JavaObject
    Dim vtype As Int = -1, pixelFormat As Int = -3
    mlp.InitializeNewInstance("android.view.WindowManager$LayoutParams", Array(vtype, 100, 2010,296, pixelFormat))
    mlp.SetField("gravity", Bit.OR(Gravity.TOP, Gravity.CENTER))
    Dim windowManager As JavaObject = GetContext.RunMethod("getSystemService", Array("window"))
    windowManager.RunMethod("addView", Array(mView, mlp))
End Sub

Sub GetContext As JavaObject
    Return GetBA.GetField("context")
End Sub

Sub GetBA As JavaObject
    Dim jo As JavaObject
    Dim cls As String = Me
    cls = cls.SubString("class ".Length)
    jo.InitializeStatic(cls)
    Return jo.GetFieldJO("processBA")
End Sub
#End Region

در اندروید جدیدا خطای پایین میاد

 

Error occurred on line: 66 (lockstatus)
java.lang.reflect.InvocationTargetException
	at java.lang.reflect.Method.invoke(Native Method)
	at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:131)
	at b4a.test.lockstatus._addoverlay(lockstatus.java:263)
	at b4a.test.lockstatus._service_start(lockstatus.java:390)
	at java.lang.reflect.Method.invoke(Native Method)
	at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
	at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
	at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
	at java.lang.reflect.Method.invoke(Native Method)
	at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
	at anywheresoftware.b4a.BA.raiseEvent(BA.java:176)
	at b4a.test.lockstatus.handleStart(lockstatus.java:100)
	at b4a.test.lockstatus.access$000(lockstatus.java:8)
	at b4a.test.lockstatus$1.run(lockstatus.java:71)
	at anywheresoftware.b4a.objects.ServiceHelper$StarterHelper.onStartCommand(ServiceHelper.java:237)
	at b4a.test.lockstatus.onStartCommand(lockstatus.java:69)
	at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3885)
	at android.app.ActivityThread.access$1700(ActivityThread.java:237)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.Loop(Looper.java:214)
	at android.app.ActivityThread.main(ActivityThread.java:7045)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by: android.view.WindowManager$BadTokenException: Unable To add window android.view.ViewRootImpl$W@d8ef02f -- permission denied For window Type 2010
	at android.view.ViewRootImpl.setView(ViewRootImpl.java:1064)
	at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:381)
	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
	... 25 more

لاین 66 هم اینه :

    windowManager.RunMethod("addView", Array(mView, mlp))

 

با تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 5 دقیقه قبل، salmana گفته است :

یه لیبل میاد روی استاتوس بار و طرف هر چی میاد استاتوس رو از بالا به پایین بکشه(و نوتیفیکیشنها رو ببینه) نمیتونه و اصلا نمیشه از بالا به پایین بکشیم.

قبلنا جواب میداد ولی تو اندروید جدید خطای ترسیم میده. یعنی این:


android.view.WindowManager$BadTokenException: Unable To add window android.view.ViewRootImpl$W@d8ef02f -- permission denied For window Type 2010
	at android.view.ViewRootImpl.setView(ViewRootImpl.java:1064)

 

البته من بعید میدونم که تو اندروید جدید شدنی باشه ولی کد رو براتون اصلاح میکنم تست کنید ببینید کار میکنه یا نه.

تو کدهای بالا همه چیش رو ثابت بزارید فقط خط زیر به جای 2010 عدد 2036 رو بزارید برای اندروید بالای 8  (api 28) و برای پایین تر از ۸ عدد 2002 رو قرار بدید.

 mlp.InitializeNewInstance("android.view.WindowManager$LayoutParams", Array(vtype, 100, 2010,296, pixelFormat))

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درود

این دوتا پرمیشنو به manifest اضافه کنید ببینید مشکل حل میشه یا نه

AddPermission(android.permission.INTERNAL_SYSTEM_WINDOW)
AddPermission(android.permission.SYSTEM_ALERT_WINDOW)
لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 10 دقیقه قبل، godping گفته است :

درود

این دوتا پرمیشنو به manifest اضافه کنید ببینید مشکل حل میشه یا نه


AddPermission(android.permission.INTERNAL_SYSTEM_WINDOW)
AddPermission(android.permission.SYSTEM_ALERT_WINDOW)

از قبل این دسترسی ها داده بودم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

منظورتون از قفل کردن چیه دوست عزیز؟ دقیقا چه اتفاقی میخواین بیفته؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 9 ساعت قبل، محمدرضا شاهپیری گفته است :

منظورتون از قفل کردن چیه دوست عزیز؟ دقیقا چه اتفاقی میخواین بیفته؟

یه لیبل میاد روی استاتوس بار و طرف هر چی میاد استاتوس رو از بالا به پایین بکشه(و نوتیفیکیشنها رو ببینه) نمیتونه و اصلا نمیشه از بالا به پایین بکشیم.

قبلنا جواب میداد ولی تو اندروید جدید خطای ترسیم میده. یعنی این:

android.view.WindowManager$BadTokenException: Unable To add window android.view.ViewRootImpl$W@d8ef02f -- permission denied For window Type 2010
	at android.view.ViewRootImpl.setView(ViewRootImpl.java:1064)

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...