Android M になると、ユーザーが permission(protectionLevel=dangerous)を任意のタイミングで操作できるようになるのはご存知かと思います。アプリインストール時は、以下のようになります。
- targetSDK を API22 以前に指定 -> dangerous な permission が デフォルト ON でインストールされる
- targetSDK を API23 に指定 -> dangerous な permission が デフォルト OFF でインストールされる
このように、targetSDK を API23 に指定する場合は、dangerous な permission が OFF になってしまうため、必然的に permission のチェックが必要になってくることになります。これを嫌って、targetSDK を API22 以前のものに指定する開発者もまだいらっしゃるかと思いますが、その場合、Context.checkSelfPermission がうまく動かないようです。
https://code.google.com/p/android-developer-preview/issues/detail?id=2773
https://code.google.com/p/android-developer-preview/issues/detail?id=2824
ということで、targetSDK を API22 以前のままビルドするアプリを 、Android M に取り急ぎ対応させたい場合(compileSDK を API23 にするなど)は、PermissionChecker を使いましょう。
2015/10/15 追記
SMS の permission(READ_SMS など)は、targetSDK を API23 にしないと、状態が正しく取得できないです。仕様かどうかはソースを調べてないのでわかりません。