![](/img/trans.png)
[英]Android - WRITE_EXTERNAL_STORAGE permission and writing app's log
[英]android - close app if user not granting WRITE_EXTERNAL_STORAGE permission
在 android 6 或更高版本中,當用戶第一次打開應用程序時,如果他不允許,則向他詢問一些許可,然后退出應用程序
我的應用程序的一些必須要求的權限是讀寫外部存儲,如何實現這一點
我試過這個
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(LoginActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(LoginActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(LoginActivity.this,
new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE},
1);
} else {
//do something
}
} else {
//do something
}
您需要讀取onRequestPermissionsResult()
的結果,如果用戶拒絕了權限,請調用context.finish()
或context.finishAffinity()
。 類似於... 編輯:查看文檔以了解如何處理權限: Android 6 Permissions
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
case MAIN_PERMISSIONS:
if (grantResults.length > 0) {
// Validate the permissions result
if (permissionsOk) {
// All good
} else {
// Close your app
closeNow();
}
}
break;
}
}
private void closeNow() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
finishAffinity();
} else {
finish();
}
}
使用@G 的建議。 布里西達 - 林斯
我解決了它,如果其他人需要同樣的東西,我會在這里寫我的答案,
這是我在 MainActivity 中編寫的所有代碼:
if(Build.VERSION.SDK_INT >= 23)
{
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE},
1);
}
else
{
//do something
}
}
}
這是覆蓋方法 onRequestPermissionsResult:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch(requestCode)
{
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
// i am creating folder in external storage here
File create_dir=new File(Environment.getExternalStorageDirectory()+"/uca/");
Toast.makeText(this,"creating",Toast.LENGTH_LONG).show();
create_dir.mkdirs();
}
else
{
closeNow();
}
break;
}
}
這是接近的方法:
private void closeNow() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
finishAffinity();
}
else
{
finish();
}
}
您的應用程序因運行時異常而非許可而關閉。 只需在運行應用程序時打開 logcat 並檢查異常或錯誤。
我希望它對你有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.