如果有调用权限,如何使应用程序与平板电脑兼容?
How to make app compatible with tablet, if there is call permission?
我最近发布了一个用于生产的应用程序,我使用了 API 级别 19,因此它应该可以在 Android 高于 4.4 的任何手机上运行,确实如此。人们可以毫无问题地将它安装在手机上。突然间,平板电脑用户开始抱怨,当他们在 Google 播放时,它显示 "This app is not compatible with your device",所以他们无法安装。其中之一在平板电脑上有 Android 6,因此从理论上讲,它应该可以毫无问题地工作。然而,另一个人说他们在 Android 7.1.1 平板电脑上安装它没有问题。
感谢@tyczj 的评论,并在询问了一些使用平板电脑的人后,我意识到兼容性问题之一是该应用程序需要调用权限,这并非在所有平板电脑上都可用。因此,我想知道是否有任何方法可以让没有 SIM 卡的平板电脑可以使用它,但具有相同的权限,可以使其在手机上完全发挥作用。有没有办法为没有 SIM cards/call 功能的平板电脑添加这些权限的例外?
下面我从清单中提取了部分:
<< ? xml version = "1.0"
encoding = "utf-8" ? >
<
manifest xmlns : android = "http://schemas.android.com/apk/res/android"
package = "packagename" >
<
uses - permission android: name = "android.permission.INTERNET" / >
<
uses - permission android: name = "android.permission.CALL_PHONE" / >
<
uses - permission android: name = "android.permission.VIBRATE" / >
<
uses - permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" / >
<
uses - permission android: name = "android.permission.CAMERA" / >
<
uses - permission android: name = "android.permission.ACCESS_FINE_LOCATION" / >
<
uses - permission android: name = "android.permission.ACCESS_COARSE_LOCATION" / >
<
uses - permission android: name = "android.permission.ACCESS_NETWORK_STATE" / >
<
application
android: allowBackup = "true"
android: icon = "@mipmap/app_logo"
android: label = "@string/app_name"
android: roundIcon = "@mipmap/app_logo"
android: supportsRtl = "true"
android: theme = "@style/AppTheme" >
<
activity android: name = ".MainScreenActivity" >
<
intent - filter >
<
action android: name = "android.intent.action.MAIN" / >
<
category android: name = "android.intent.category.LAUNCHER" / >
<
/intent-filter> <
/activity> <
activity android: name = ".MainMenu" / >
//And some other activities below
和 Gradle:
pply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
generatedDensities = []
applicationId "package_name"
minSdkVersion 19
targetSdkVersion 26
versionCode 30
versionName "30"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
aaptOptions {
}
buildTypes {
release {
minifyEnabled false
crunchPngs false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//Here are the dependencies
您需要额外声明uses-feature
以获得您的许可。在此声明中,您可以指定特定权限是否是您的应用运行所必需的。
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" />
此处 name
是权限描述符,required
是确定 permission/feature 是否是您的应用运行所必需的标志。
尝试将此添加到您的 AndroidManifest.xml
文件中:
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
我最近发布了一个用于生产的应用程序,我使用了 API 级别 19,因此它应该可以在 Android 高于 4.4 的任何手机上运行,确实如此。人们可以毫无问题地将它安装在手机上。突然间,平板电脑用户开始抱怨,当他们在 Google 播放时,它显示 "This app is not compatible with your device",所以他们无法安装。其中之一在平板电脑上有 Android 6,因此从理论上讲,它应该可以毫无问题地工作。然而,另一个人说他们在 Android 7.1.1 平板电脑上安装它没有问题。
感谢@tyczj 的评论,并在询问了一些使用平板电脑的人后,我意识到兼容性问题之一是该应用程序需要调用权限,这并非在所有平板电脑上都可用。因此,我想知道是否有任何方法可以让没有 SIM 卡的平板电脑可以使用它,但具有相同的权限,可以使其在手机上完全发挥作用。有没有办法为没有 SIM cards/call 功能的平板电脑添加这些权限的例外?
下面我从清单中提取了部分:
<< ? xml version = "1.0"
encoding = "utf-8" ? >
<
manifest xmlns : android = "http://schemas.android.com/apk/res/android"
package = "packagename" >
<
uses - permission android: name = "android.permission.INTERNET" / >
<
uses - permission android: name = "android.permission.CALL_PHONE" / >
<
uses - permission android: name = "android.permission.VIBRATE" / >
<
uses - permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" / >
<
uses - permission android: name = "android.permission.CAMERA" / >
<
uses - permission android: name = "android.permission.ACCESS_FINE_LOCATION" / >
<
uses - permission android: name = "android.permission.ACCESS_COARSE_LOCATION" / >
<
uses - permission android: name = "android.permission.ACCESS_NETWORK_STATE" / >
<
application
android: allowBackup = "true"
android: icon = "@mipmap/app_logo"
android: label = "@string/app_name"
android: roundIcon = "@mipmap/app_logo"
android: supportsRtl = "true"
android: theme = "@style/AppTheme" >
<
activity android: name = ".MainScreenActivity" >
<
intent - filter >
<
action android: name = "android.intent.action.MAIN" / >
<
category android: name = "android.intent.category.LAUNCHER" / >
<
/intent-filter> <
/activity> <
activity android: name = ".MainMenu" / >
//And some other activities below
和 Gradle:
pply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
generatedDensities = []
applicationId "package_name"
minSdkVersion 19
targetSdkVersion 26
versionCode 30
versionName "30"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
aaptOptions {
}
buildTypes {
release {
minifyEnabled false
crunchPngs false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//Here are the dependencies
您需要额外声明uses-feature
以获得您的许可。在此声明中,您可以指定特定权限是否是您的应用运行所必需的。
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" />
此处 name
是权限描述符,required
是确定 permission/feature 是否是您的应用运行所必需的标志。
尝试将此添加到您的 AndroidManifest.xml
文件中:
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />