は(以前に付与されていない場合。)インストール時に付与されていないと、実行時に必要なときに要求されている必要があり
これを行うには、システムのアクセス権ダイアログをポップアップ表示するActivityCompat.requestPermissions()
を実行する必要がありますユーザが追加のシステム権限を必要とするアクションを実行しているときに、アクティビティに追加する必要があります。
WRITE_EXTERNAL_STORAGE
許可のために、この例は次のようになります。
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_EXTERNAL_STORAGE_REQUEST_CODE
);
注:WRITE_EXTERNAL_STORAGE_REQUEST_CODE
あなたが他の場所で定義する必要があり、任意の整数の定数です。
要求するアクセス許可は、AndroidManifest.xml
でも宣言する必要があります。この例では、宣言は次のようになります。また、あなたの活動にonRequestPermissionsResult()
を実装する必要があります、システム権限ダイアログ応答を処理するために
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
。この例のコードは、あなたがEspresso、UIAutomatorおよび/または他のいくつかのUIテストフレームワークを通して、あなたのアプリを自動化している場合は、そのことができ、あなたのテスト中にシステムダイアログを予測し、クリックする必要があります
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
if (grantResults.length == 0 || grantResults[0] == PackageManager.PERMISSION_DENIED) {
return; //permission not granted, could also optionally log an error
}
if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
//Do whatever you needed the write permissions for
}
}
のようになります次のテストコードを用いて達成され:
private void allowPermissionsIfNeeded() {
if (Build.VERSION.SDK_INT >= 23) {
UiObject allowPermissions = mDevice.findObject(new UiSelector().text("Allow"));
if (allowPermissions.exists()) {
try {
allowPermissions.click();
} catch (UiObjectNotFoundException e) {
Timber.e(e, "There is no permissions dialog to interact with ");
}
}
}
}
試験システムUI権限のより包括的な説明はhere利用可能です。
詳細な説明をいただきありがとうございますが、私は「エスプレッソ」の後ろの最後の部分のみが必要です。ところで、私は「Espresso」を通して私のアプリを自動化していません、私はちょうどボタンをクリックし、アプリ内からアプリの流れをコントロールしています。 「エスプレッソ」のようなものを使わずにそうすることは可能ですか? – KayPee
あなたは歓迎です。正確に何を自動化しようとしていますか?これは現在どのようにしていますか?質問の説明から、あなたが達成しようとしていること(またはアプリ内のボタンを「クリック」すること)が少し不明です。 –
これは、button1をクリックしたいときはいつでも、button1.performClick()を実行することを意味します。同様に、私のアプリが許可を求めるときはいつでも、システムダイアログで「許可」をクリックする方法はありますか? – KayPee