你好
我想使用spinner,切換ImageView的圖片,在Kebbi上單獨測試APP是正常可運作的
但是APP到導入NUWA SDK會有問題Permission NOT granted: android.permission.INSTALL_PACKAGES
請問該如何解決呢?
-
spinner 的部分
-
導入SDK前後
你好
我想使用spinner,切換ImageView的圖片,在Kebbi上單獨測試APP是正常可運作的
但是APP到導入NUWA SDK會有問題Permission NOT granted: android.permission.INSTALL_PACKAGES
請問該如何解決呢?
spinner 的部分
導入SDK前後
@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而檔掉你的行為。
我覺得跟我猜的差不多^^"
你每次click item都會檢查一次所有宣告的權限 (包含你宣告的+NuwaSDK Manifest內宣告的)
但由於 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;
}
}