2017-10-25 1 views
0

で何もしない、私はPermissionsServiceと呼ばれるアクセス権を要求するためのクラスを作りました。ActivityCompat.requestPermissionsはすべて

mactivityの値はMainActivityであり、androidManifestPermissionの値は"android.permission.ACCESS_FINE_LOCATION"です。

問題の内容がわかりません。

非常に興味深いものがありました。

requestPermissions関数は、最初の引数としてアクティビティをとります。しかし、それが実行するコールバックonRequestPermissionsResultは、インタフェースActivityCompatで定義されています。 OnRequestPermissionsResultCallback

どのようにすることができますか?ファンクションrequestPermissionsは、onRequestPermissionsResultのコールをActivity(最初の引数)にどのように見つけることができますか?

多分、それは私の問題に関係していますか?

アクティビティをOnRequestPermissionsResultCallbackに実装しようとしました。 @OverrideonRequestPermissionsResultという関数に注釈を付けると、コンパイラは関数onRequestPermissionsResult(インタフェースOnRequestPermissionsResultCallbackから)がスーパークラスをオーバーライドしないと不平を言う。

私の主な関心事は、OSからユーザーの許可を得ることができないということです。

問題は何ですか?

runOnUIThread

私は(動作しませんでした)ので、同じようUIThreadにrequestPermissionsを実行してみました:

mactivity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); 
    } 
}); 

答えて

1

すでにアクセス権を持っている場合は、requestPermissions方法は、権限のダイアログが表示されません。

権限がまだない場合は、権限を求めるダイアログが表示されます。

ダイアログが表示され、ユーザーが許可または拒否した後。アクティビティのコールバックメソッドonRequestPermissionsResultが呼び出されます。

アクティビティ内にいない限り、onRequestPermissionsResultメソッドをオーバーライドすることはできません。

ただし、ヘルパークラスのメソッドを作成して権限を委任できます。あなたのヘルパークラスで

public static void onRequestPermissionResult(/*params*/){ 
    //your code 
} 

そして、あなたの活動で、メソッドをオーバーライドして、ヘルパークラスに渡し:私は使用することができ許可ライブラリーを構築している

@Override 
public void onRequestPermissionResult(/*params*/){ 
    PermissionsService.onRequestPermissionResult(/*params*/); 
} 

誰でも。ソースコードを見たり、ライブラリをインポートして直接使用することができます。

https://github.com/nabinbhandari/Android-Permissions

+0

こんにちは。私は、アクティビティの中で 'onRequestPermissionsResult'をオーバーライドしようとしました。 'メソッドは、そのスーパークラスのメソッドをオーバーライドしない 'と私に伝えます。 –

+0

私には問題があります。ありがとう;) –

+0

助けがあれば、それを受け入れたものとしてマークすることを忘れないでください。 –

関連する問題