2016-08-10 11 views
1

実行時の許可を求めています。それは許可を求めており、すべてが良いです。しかし、問題は、権限ダイアログが何らかの形でアクティビティの外に表示されていることです。アクティビティを終了し、許可ダイアログを表示します。私はそのダイアログを私の活動に見せたい。アンドロイドのアクティビティからの許可ダイアログが表示されます

これはこれで問題が解決するかどうか、私は知りませんが、それは私を解決し、私のコード

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機能をオーバーライド...修正を発見したように見えるが、私の問題の両方を解決します。

まず、ダイアログが自分のアクティビティ画面の前に表示されます。

第2に、ユーザーが要求されたアクセス許可を許可するか拒否するかに基づいて何が起こるかを制御できるようになりました。

@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); 
     } 
    } 

私は、余分な権限を追加しますが、これは私に良い出発点を持っているし、2つの当面の問題を解決してロジックを少し微調整する必要があります。

関連する問題