1
このサービスを開始するために必要なアクセス許可があるかどうかを動的にチェックしたいサービスがあります。呼び出し元のIDは、サービスを使用しているアプリケーションの実際のIDではなく、サービスが定義されているアプリケーションであることがわかりました(これはonStartCommand()のgetCallingUid()メソッドとgetCallingPid onStartCommand()にない場合、このチェックをどこで実行するのですか?これを行うにはどうしたらいいですか?サービスで発信者のアクセス許可を動的に確認する
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("TAG", "uid: " + getCallingUid() + " pid: " + getCallingPid());
int hasPermission = checkCallingPermission(MainActivity.CUSTOM_PERMISSION);
if (hasPermission == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Created", Toast.LENGTH_SHORT).show();
}
return flags;
}
}
'Service'マニフェスト内の['permission'属性](https://developer.android.com/guide/topics/manifest/service-element.html#prmsn)で定義できます。なぜこれを動的にチェックしたいのですか? –
問題は、そのサービスをホストするアプリケーションのIDではなく、呼び出し元のアプリケーションのIDを取得することです。上記のコードでは、pidとuidは常にサービスが実装されているアプリからのものです。 –
私はあなたが私の以前のコメントのポイントを逃したと思う。 'onStartCommand'が呼び出された場合は、呼び出し元に必要な権限があることをすでに知っています。 –