2016-04-11 10 views
0

私は画面ロックアプリケーションを作成しており、ロック画面でドラッグすることができます。Android removeViewがクラッシュしました

私はこれを調べて、以下のaddViewコードを使用して通知バーをブロックするこのソリューションを見つけましたが、ユーザーが自分のアプリケーションをロック解除した後でビューを削除できません。ビューを削除する方法をアドバイスしてください。

私はmanager.removeView(view);public void onDestroy() {に使用しようとしましたが、このコードを実行した後にクラッシュしました。

これは私がremoveViewコードを置く必要があり、エラーメッセージ

FATAL EXCEPTION: main 
Process: com.mehuljoisar.lockscreen, PID: 10256 
java.lang.IllegalArgumentException: View=android.view.View{42348cc0 V.ED.... ........ 0,0-0,0} not attached to window manager 
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:373) 
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:302) 
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79) 
at com.mehuljoisar.lockscreen.LockScreenActivity.disablePullNotificationTouch(LockScreenActivity.java:261) 
at com.mehuljoisar.lockscreen.LockScreenActivity.access$100(LockScreenActivity.java:24) 
at com.mehuljoisar.lockscreen.LockScreenActivity$2.onClick(LockScreenActivity.java:113) 
at android.view.View.performClick(View.java:4469) 
at android.view.View$PerformClick.run(View.java:18788) 
at android.os.Handler.handleCallback(Handler.java:808) 
at android.os.Handler.dispatchMessage(Handler.java:103) 
at android.os.Looper.loop(Looper.java:193) 
at android.app.ActivityThread.main(ActivityThread.java:5347) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:835) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:651) 
at dalvik.system.NativeStart.main(Native Method) 

のですか?

あなたが

WindowManager manager = ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)); 

WindowManager manager = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)); 

を使用しないで使用し

private void disablePullNotificationTouch(String gg) { 
    WindowManager manager = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)); 
    WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams(); 
    localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 
    localLayoutParams.gravity = Gravity.TOP; //make the line top 
    localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 

    // this is to enable the notification to recieve touch events 
    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
    // Draws over status bar 
    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 

    localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; 
    localLayoutParams.height = (int) (25 * getResources().getDisplayMetrics().scaledDensity); 
    localLayoutParams.format = PixelFormat.RGBX_8888; 
    View view = new View(this); 
    if(gg == "on") { 
    manager.addView(view, localLayoutParams); 
    }else { 
    manager.removeView(view); 
    } 
} 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    disablePullNotificationTouch("on"); 
    } 
@Override 
    public void onDestroy() { 
    super.onDestroy(); 
    disablePullNotificationTouch("off"); 
    } 
+0

ログキャットを表示できますか? –

+0

@NguyễnTrungHiếu私は質問に追加しました。 thx –

+0

別の投稿で回答が見つかりました。 http://stackoverflow.com/questions/25284233/prevent-status-bar-for-appearing-android-modified?answertab=active#tab-top –

答えて

1

はそれを試してみてください!

+0

答えをいただきありがとうございますが、ビューを削除してもクラッシュしました。 もう一度質問を編集すると、ビューを削除する方法がわかります。 –

+0

はい。それがあなたを助けることを望みますか? –

+0

ああ、私はWindowManagerマネージャ=((WindowManager)this.getSystemService(Context.WINDOW_SERVICE))を使用する場合は、通知バーはドラッグすることができます.. –

関連する問題