簡體   English   中英

權限請求(WRITE_EXTERNAL_STORAGE)未顯示

[英]Permission Request (WRITE_EXTERNAL_STORAGE) doesn't show up

Android 6

我編寫了下一個檢查權限的代碼,如果沒有這樣的權限,它會要求用戶提供權限。

private void checkDiskPermission ()
{
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(this, "no disk access" , Toast.LENGTH_LONG).show();
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    }
    else
    {
        Toast.makeText(this, "disk access - OK" , Toast.LENGTH_LONG).show();
    }

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(this, "no GPS access" , Toast.LENGTH_LONG).show();
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
    }
    else
    {
        Toast.makeText(this, "GPS access - OK" , Toast.LENGTH_LONG).show();
    }
}

此代碼適用於GPS權限,但不適用於WRITE_EXTERNAL_STORAGE權限。 僅在一種情況下會出現一個對話框。

為什么會這樣呢?

謝謝!

因為您同時請求2次。 這就是為什么它要接受最后一個請求。

解決方案是您必須在一個請求中同時要求兩個權限

像這樣-

private void checkDiskPermission ()
{
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(this, "No Permissions" , Toast.LENGTH_LONG).show();
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
    }
    else
    {
        Toast.makeText(this, "Has Permissions" , Toast.LENGTH_LONG).show();
    }
}

如果permission > 1 ,則必須在運行時將其合並在一起。

根據Google的說法,從Android 6.0(API級別23)開始,即使該應用程序針對較低的API級別,用戶也可以隨時從任何應用程序撤消權限。 無論您的應用程序面向哪個API級別,都應測試您的應用程序以驗證其在缺少所需權限時是否能夠正常運行。

要求多重權限時要記住的事情:

  1. 許可數。
  2. 不再詢問Checkox

查看多權限請求的來源

您的代碼運行正常。 Java代碼中的運行時權限沒有問題。 檢查清單后,是否添加該行?

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM