使用spinner,造成Permission NOT granted: android.permission.INSTALL_PACKAGES

你好
我想使用spinner,切換ImageView的圖片,在Kebbi上單獨測試APP是正常可運作的
但是APP到導入NUWA SDK會有問題Permission NOT granted: android.permission.INSTALL_PACKAGES
請問該如何解決呢?

  1. spinner 的部分
    0_1630403206399_2a70c05a-0feb-42e2-8034-f44baf8880ce-image.png
    0_1630403303311_2d9ed441-944b-41d9-8664-7db8bfc51972-image.png

  2. 導入SDK前後
    0_1630403394139_c6b3ba57-7f0e-44dd-97af-dce0ec98aef6-image.png
    0_1630403508716_76841718-86a9-4c69-a239-d5d395e8be57-image.png

@chuangwater2487 NuwaSDK確實有宣告這兩個permission, 但在一般情況下應該是不會因為宣告了而造成程式異常。
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />

可否分享更多點的程式片斷讓我幫忙看看,我在想會不會是你判斷權限的地方若有一個permission沒有被grant就把整個行為檔掉。

如果是的話,可能要請你調整一下判斷,ignore讓INSTALL_PACKAGES permission不會因為沒有grant而檔掉你的行為。

麻煩你幫忙看看,謝謝
Activity部分
0_1630476267655_008126b8-4c76-4d59-bf2c-6697fa9d8063-image.png
0_1630476305014_69201e17-6447-475f-86d2-df4063861ac8-image.png
0_1630476341639_d1e7d432-2ecd-428d-a97e-377241759cff-image.png
0_1630476369480_d907335e-1fd2-4634-a15e-2f7b21d0e92f-image.png
0_1630476403295_f04253a1-cfd7-4f3a-be34-3888536d625c-image.png
0_1630476431398_68de1e19-f28a-488e-94c1-b96ed7a0cc8d-image.png
0_1630476494343_3e114e35-79d1-47a8-b9c7-caf2195c9f80-image.png
0_1630476523216_b242b941-31ab-44a2-a8b9-b7c5159dea28-image.png
0_1630476549989_41bb885b-e5ed-4b03-89b7-d1ea62a2a849-image.png

Manifest.xml部分
0_1630475943076_7006932a-939d-4eae-b1d1-756cb8fb9add-image.png

Build.grade部分
0_1630476078910_326bb877-c1b7-4298-ae9d-172396297ced-image.png
0_1630476136885_259b817f-7287-43cc-a351-f0f745de7318-image.png

我覺得跟我猜的差不多^^"
你每次click item都會檢查一次所有宣告的權限 (包含你宣告的+NuwaSDK Manifest內宣告的)
0_1630482578754_ac21b625-21a3-44e0-9259-fe40f1942aa8-image.png

但由於 nuwa sdk 內宣告的這兩個,因為這兩個要系統APP才能取得權限,因此你們永遠都無法取得權限
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
這導致了你的allPermissionsGranted() 永遠都會回傳false.

我猜測你們這段權限判斷,是不是只是想確保每次click run time permission都有被允許??
一般來說(Google建議)runtime permission都要在一開APP的時候就確認

底下給個sample code參考一下,你只需要針對runtime permission在一開始的時候確認即可,一但取得權限了,通常不會在APP UI執行期間重複的檢查

private static final int PERMISSION_REQUEST_PERM = 101;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            this.requestPermissions();
        }else{
            checkSystemWritePermission();
        }
}
private void requestPermissions() {
        String[] permissions = new String[] {
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.READ_PHONE_STATE};
        ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_PERM );
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case LOCATION_PERM:
                if  (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    Log.e(TAG, "Coarse location permission is not granted!");
                    finish();
                }
                break;
        }
    }
Log in to reply

Looks like your connection to NUWA robotics developer forum was lost, please wait while we try to reconnect.