2017-10-12 561 views
1

我对Android/Java开发非常陌生,过去几天我一直试图为Cordova构建一个插件,并且已经到了关键位置在其中它执行我的应用程序,但是我现在在亚行logcat得到这个令人沮丧的错误,每当我试图执行一个功能:在'androidManifest.xml'中声明的权限,但仍然获得权限拒绝

ActivityManager: Permission Denial: Accessing service ComponentInfo{com.kddi.market.validation/com.kddi.market.validation.alml.service.ALMLService} from pid=20745, uid=10336 requires com.kddi.market.permission.USE_ALML 

该库的文档,我正在使用规定,“com.kddi .market.permission.USE_ALML'必须包含在androidManifest.xml中,因此我有:

<?xml version='1.0' encoding='utf-8'?> 
<manifest android:hardwareAccelerated="true" android:versionCode="30009" android:versionName="3.0.6" package="com.smartpass.asianvalue.skychasers" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true"> 
     <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize"> 
      <intent-filter android:label="@string/launcher_name"> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" /> 

    <uses-permission android:name="com.kddi.market.permission.USE_ALML" /> 

    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
</manifest> 

在这个问题上几个小时了,我真的很感激,如果有人知道可以给我一些洞察问题的可能性。 我见过其他人通过在他们的活动中包含android:exported="true"解决了他们的问题,但是这对我来说并不适用,也许沿着类似的路线?

我还试图请求权限在运行时使用下列内容:

if (action.equalsIgnoreCase("initClient")) { 

    if(cordova.hasPermission("com.kddi.market.permission.USE_ALML")) { 
     this.initClient(callbackContext); 
    } else { 
     cordova.requestPermission(this, 0, "com.kddi.market.permission.USE_ALML"); 
    } 

    return true; 
} 
+1

如果在棉花糖及以上版本上运行,您是否正在处理运行时权限以及写入和读取外部存储以及清单中所述的其他存储。 –

+1

我试图这样做,但那也没有结果,并且仍然返回相同的错误。以下是我如何尝试它:'if(cordova.hasPermission(“com.kddi.market.permission.USE_ALML”))this.initClient(callbackContext); } else { cordova.requestPermission(this,0,“com.kddi.market.permission.USE_ALML”); }' –

回答

0

我已经找到了解决办法,在使用前没有被定义的权限。我从来没有见过任何人必须像以前那样使用自定义权限,而且必须相互定义和设置权限似乎有点冗余。

而不是我的 'AndroidManifest.xml中' 只具有:

<uses-permission android:name="com.kddi.market.permission.USE_ALML" /> 

我需要:

<permission android:name="com.kddi.market.permission.USE_ALML" /> 

放之前。

很奇怪。