यह पॉपअप मैनिफ़ेस्ट के कारण होता है। PERMISSION.SYSTEM_ALERT_WINDOW अनुमति के रूप में प्रकट होता है।
अनुमतियों की 3 श्रेणियां हैं, उस डेवलपर को इसके बारे में पता होना चाहिए:
सामान्य अनुमति - उनके साथ कुछ भी न करें, बस घोषणापत्र में घोषणा करें
कमजोर अनुमति - घोषणापत्र में घोषणा करें और पहली बार में अनुमति मांगें। उन्हें सिस्टम सेटिंग्स के माध्यम से बदला जा सकता है।
खतरनाक अनुमतियों से ऊपर: SYSTEM_ALERT_WINDOW और WRITE_SETTINGS इस श्रेणी के हैं। उन्हें प्रदान किया जाना चाहिए, लेकिन सिस्टम सेटिंग्स में दिखाई नहीं दे रहे हैं। इसके लिए अनुरोध करने के लिए आप मानक तरीके (int checkSelfPermission (स्ट्रिंग अनुमति)) का उपयोग नहीं करते हैं, लेकिन आपको Settings.canDrawOverlays () या Settings.System.canWrite () को उचित रूप से जांचना होगा और यदि आप ऐसा नहीं करते हैं तो आपको अपवाद जैसा मिलेगा।
विंडो जोड़ने में असमर्थ android.view.ViewRootImpl$W@1de28ad - इस विंडो प्रकार के लिए अनुमति अस्वीकृत
1-इस अनुमति को अपने कोड में अपने आप से निवेदन करें जैसे नीचे दिया गया है:
public class MainActivity extends AppCompatActivity {
public final static int REQUEST_CODE = 10000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkDrawOverlayPermission()) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
public boolean checkDrawOverlayPermission() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
return false;
} else {
return true;
}
}
@Override
@TargetApi(Build.VERSION_CODES.M)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
}