2016-08-10 3 views
1

런타임 권한을 요청하고 있습니다. 허가를 요청하고 모든 것이 잘됩니다. 하지만 문제는 권한 대화 상자가 어떻게 든 액티비티 외부에 표시된다는 것입니다. 액티비티를 닫은 다음 허가 대화 상자를 표시합니다. 대화를 내 활동에 표시하고 싶습니다. android의 활동에서 권한 대화 상자가 표시됩니다.

내 코드

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(activity_main); 
    setPasswordText = (EditText) findViewById(R.id.setPasswordText); 
    setSecurityText = (EditText) findViewById(R.id.setSecurityText); 
    messageToSendText = (EditText) findViewById(R.id.messageToSendText); 
    numberToSendText = (EditText) findViewById(R.id.numberToSendText); 
    /* if(Build.VERSION.SDK_INT >= 23) { 
     if (!Settings.canDrawOverlays(this)) { 
      Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
        Uri.parse("package:" + getPackageName())); 
      startActivityForResult(intent, 1234); 
     } 
    } 
    else 
    { 
     Intent intent = new Intent(this, Service.class); 
     startService(intent); 
    } */ 

    KING(); 
} 

// @TargetApi(Build.VERSION_CODES.M) 
public void KING() { 
    // Toast.makeText(this, "Executed", Toast.LENGTH_SHORT).show(); 
    if (Build.VERSION.SDK_INT >= 23){ 
     if (checkSelfPermission(Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) { 
      Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show(); 
     } else { 
      if (shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS)) { 
       Toast.makeText(this, "RECEIVE SMS permission is needed", Toast.LENGTH_LONG).show(); 
      } 
      // Toast.makeText(this, "Permission Not Granted", Toast.LENGTH_SHORT).show(); 
      requestPermissions(new String[]{Manifest.permission.SEND_SMS}, REQUEST_SEND_SMS); 
     } 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){ 
    if(requestCode == REQUEST_SEND_SMS){ 
     if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
      Toast.makeText(this, "PERMISSION GRANTED BY YOU", Toast.LENGTH_LONG).show(); 
     }else{ 
      Toast.makeText(this, "PERMISSION DENIED BY YOU", Toast.LENGTH_LONG).show(); 
     } 
    }else{ 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 
+0

활동을 닫으시겠습니까? 확실합니까? 내가 아는 한, 활동을 일시 중지합니다. –

+0

좋아. 일시 중지하더라도. 사실, 활동 레이아웃은 표시되지 않고 권한 대화 상자 만 표시됩니다. –

+0

'KING()'메서드를'onResume()'으로 옮겨보십시오. –

답변

0

이 방법으로 문제가 해결되는지 모르겠다 그러나 그것은 내 해결했다. 나는 오랫동안 잊고 있었던 역사적인 이유로 나는

이 즉시 활동이 전경에없는대로 종료한다는 것을 의미 다음 플래그 내 활동

Intent.FLAG_ACTIVITY_NO_HISTORY에 설정했다. 그래서 권한 대화 상자가 나타나면 내 활동이 중단되었습니다. 대답은 그 깃발을 없애는 것이 었습니다. 그 점을 이해하기 위해 단지 2 일간의 좌절감 만 겪었습니다.

0

OK, 나는 수정 ...

onRequestPersmissionsResult 기능은 내 문제를 모두 해결 재정을 발견 한 것 같다.

우선 대화 상자가 내 활동 화면 앞에 나타납니다.

둘째, 사용자가 요청한 권한을 부여했는지 거부했는지에 따라 어떤 일이 발생하는지 제어 할 수있게되었습니다.

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){ 
     if(requestCode == MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION){ 
      if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
//    Toast.makeText(this, "PERMISSION GRANTED BY YOU", Toast.LENGTH_LONG).show(); 
      }else{ 
       Toast.makeText(this, "Opening app without location permission...", Toast.LENGTH_LONG).show(); 
      } 
      Intent intent = new Intent(this, websiteViewActivity.class); 
      startActivity(intent); 
      finish(); 
     }else{ 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 

내가 여분의 권한을 추가로 논리를 조금 조정할해야하지만이 나에게 좋은 출발점을 가지고 두 즉각적인 문제를 해결했다.

관련 문제