我想在"/ mnt/extsd/MyFolder"这个路径上创建一个目录.在调用mkdir()时它返回false.我在我的平板电脑上插入了sdcard,将外部路径设为"/ mnt/extsd"并尝试在此路径上创建一个文件夹.以下是我的代码,
File lSDCardDirFile = new File("/mnt/extsd/MyFolder");
if (!lSDCardDirFile.exists()) {
System.out.println("Is folder created --- " + lSDCardDirFile.mkdirs());
}
Run Code Online (Sandbox Code Playgroud)
我给了权限,.我想在外部SD卡中创建可移动SD卡的文件夹.我使用的是android 4.0 ICS版设备.
我创建了一种不同的方法来获取外部SD卡的路径,
public static String[] getStorageDirectories()
{
String[] lDirs = null;
BufferedReader lBufferReader = null;
try {
lBufferReader = new BufferedReader(new FileReader("/proc/mounts"));
ArrayList list = new ArrayList();
String lStrline;
while ((lStrline = lBufferReader.readLine()) != null) {
if (lStrline.contains("vfat") || lStrline.contains("/mnt")) {
StringTokenizer lTokenizer = new StringTokenizer(lStrline, " ");
String lStrPath = lTokenizer.nextToken();
lStrPath = lTokenizer.nextToken(); // Take the second …Run Code Online (Sandbox Code Playgroud) 我刚刚创建了一个非常简单的Android应用程序,它捕获一个Intent,稍微操纵一下,并发出一个新的Intent.我将应用程序转移到手机上adb install,现在查看应用程序的请求权限,我发现它需要我从未要求的权限:
我的清单文件中没有任何内容请求权限,而应用程序本身也很简单(这里是GitHub上的源代码).是否添加了这些额外的权限,因为我安装了它adb install,或许?或者我的应用程序中有什么值得要求这些权限,我只是没有看到?
我正在尝试通过应用程序修改手机上的某些设置,但我一直收到此错误:
java.lang.SecurityException:Permission denial:写入设置需要android.permission.WRITE_SETTINGS
我已将此权限添加到我的清单中,但错误仍然存在.这是我的清单中的一个片段:
<uses-permission
android:name="android.permission.MEDIA_CONTENT_CONTROL"
android:maxSdkVersion="11" />
<uses-permission
android:name="android.permission.CHANGE_CONFIGURATION"
android:maxSdkVersion="11" />
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="11" />
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
android:maxSdkVersion="11" />
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?
我正在尝试将我的数据库导出为CSV文件.我已经适用了相应的权限AndroidManifest.xml.我只是想知道为什么我不能在我的(实际设备)Nexus 5X API级别23中编写/创建文件,其中相同的代码在我的模拟器Nexus 7 API级别22中工作.权限是否不够?
这是代码:
private void writeCsv() {
File fileDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(),
File.separator + "Example");
if (!fileDir.exists()) {
try {
fileDir.mkdirs();
} catch (Exception e) {
e.printStackTrace();
}
}
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(),
File.separator
+ "Example"
+ File.separator
+ (new Date()) + ".csv");
if (!file.exists()) {
try {
file.createNewFile(); // THIS IS WHERE THE EXCEPTION POINTS OUT
} catch (IOException e) {
e.printStackTrace();
}
}
if (file.exists()) {
try {
FileWriter fileWriter …Run Code Online (Sandbox Code Playgroud) android ioexception android-permissions android-6.0-marshmallow
当我尝试上载我的应用程序的一个新的APK版本,我得到这个消息:"香格里拉aplicación阙有enviado recientemente SE公顷rechazado POR infringir拉斯维加斯Políticas德尔Programa对Desarrolladores去谷歌播放Si具有enviado UNAactualización,LA版前sigue estando disponible en Google Play."
在那之后,我收到并通过电子邮件谈论"Google Pay",但我从未使用谷歌付费.
我们检测到您最近上传的至少一个APK版本未正确使用Android Pay.在您的提交中包含APK版本19可能会导致您的应用因违反我们的付款政策而被拒绝.
如果您想在自己的应用中使用Android Pay,请按以下步骤操作:
从您的应用中删除所有数字内容.要使用Android Pay,您的应用只能出售实体商品或服务.确保您的应用符合开发者计划政策中列出的所有政策.请注意,如果您的应用存在进一步的政策问题,则可能会发生其他强制执 登录您的开发者控制台并提交该应用.确保增加APK的版本号.如果您想在自己的应用中使用其他付款方式,请按以下步骤操作:
从清单中删除.登录您的开发者控制台并提交该应用.确保增加APK的版本号.政策问题:Google Play的应用内结算服务的Android Pay或其他替代付款机制仅允许用于以下方式:
Android Pay适用于实体商品或服务,例如电影票.Google Play的应用内结算服务的其他替代支付机制适用于实体商品或服务,例如电影票,或价格还包含硬拷贝订阅的出版物.对于可以下载到设备并在应用程序外部使用的数字商品,例如可以在其他音乐播放器上播放的歌曲.还允许向527个指定的免税组织捐款.如果您已查看该政策并认为此拒绝可能有误,请与我们的政策支持小组联系.我的一位同事会在2个工作日内回复您.
感谢您对Google Play的支持!
最好,
拜伦
Google Play审核小组
在我的清单中我有这个
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
在playStore我看不到我的平板电脑应用程序,然后,在互联网上阅读,原因是因为我有CALL_PHONE的许可.之后我将此行添加到我的清单中:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
之后,我再也无法上传新的apk版本(我认为许可不是问题)为什么我有这种问题?谢谢!
如何申请许可?我试过文档,但是常量的int请求代码MY_PERMISSIONS_REQUEST_CALL_PHONE似乎只是工作,还有其他什么要记住的向后兼容性?
ActivityCompat.requestPermissions(getApplicationContext(),
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
Run Code Online (Sandbox Code Playgroud)
如何声明MY_PERMISSIONS_REQUEST_CALL_PHONE常量int?
我正在创建一个需要检查运行时权限的库.我有运行时权限工作正常,并了解用例没有问题.
但是,我想确认使用我们的库的开发人员已将权限添加到其清单中.
该库是一个基于位置的库,开发人员可以进入ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION进入清单,我需要能够确定他们在运行时使用过哪个(或两者).
我虽然使用包管理器来检查权限会工作但是这似乎总是失败:
PackageManager pm = getPackageManager();
int granted = pm.checkPermission(
Manifest.permission.ACCESS_COARSE_LOCATION,
getPackageName() );
if (granted == PackageManager.PERMISSION_GRANTED)
{
// Use coarse for runtime requests
}
// granted is always PackageManager.PERMISSION_DENIED
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以在Android v23 +中执行此操作吗?
我们目前正在尝试从Android手机请求GPS权限,以便我们可以在Google地图上显示当前位置.我们在清单标记下包含了应用程序标记之外的清单:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
以下是我们的代码无法正常工作的部分,它无法识别MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION:
if (ActivityCompat.checkSelfPermission(this,
android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
android.Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets …Run Code Online (Sandbox Code Playgroud) android android-manifest android-location android-permissions
我在我的应用程序的清单文件中列出了RECEIVE_SMS和READ_SMS的权限,并且它们都具有不同的权限字符串.
授予相应的权限.但是,我注意到,在授予(由用户)任何一个权限(READ_SMS或RECEIVE_SMS)时,我们可以执行这两个任务.我的问题是,如果它们都执行不同的任务:
1)READ_SMS:它允许应用程序读取用户手机上的所有SMS(当前存在).
2)RECEIVE_SMS:它允许应用程序收听用户使用应用程序时在用户手机上收到的所有短信.
它们在请求权限时显示相同的对话框,并且在拒绝其中一个权限时显示两个对话框都没有出现.
如果两者都具有相同的权限授予方案,那么为什么它们以两种权限的形式分开?如果你们中的任何人能够帮助我理解这一点,那么对我来说这将是一个很大的帮助.
我正在尝试将文件从内部手机内存移动到SD卡.
val oldFile = File(oldPath) //oldPath is string
val newFile = File(newPath) //newPath is string
if(newFile.exists()) {
newFile.delete()
}
newFile.parentFile.mkdirs()
newFile.createNewFile() //crashes here
// copy file code
Run Code Online (Sandbox Code Playgroud)
路径是绝对的.
旧文件路径是:
/storage/emulated/0/Android/data/com.package/files/2ec37ce3-ca72-4a35-a6e6-2d7f8e864c6c
Run Code Online (Sandbox Code Playgroud)
新文件路径是:
/storage/48EE-C144/chosenDirectory/2ec37ce3-ca72-4a35-a6e6-2d7f8e864c6c
Run Code Online (Sandbox Code Playgroud)
2ec37ce3-ca72-4a35-a6e6-2d7f8e864c6c文件在哪里.
路径是正确的,新的文件路径由用户手动选择,外部目录选择器库工作正常.
当然,app会询问用户的权限,并且在未授予权限之前不会将用户传递给应用程序.
int perm = this.checkSelfPermission(permission.WRITE_EXTERNAL_STORAGE);
int perm2 = this.checkSelfPermission(permission.READ_EXTERNAL_STORAGE);
if (perm != PackageManager.PERMISSION_GRANTED || perm2 != PackageManager.PERMISSION_GRANTED) {
/*ask for permissions and show explain dialog*/
}
Run Code Online (Sandbox Code Playgroud)
清单中的分配也被添加.
newFile.createNewFile()使用异常日志调用时应用程序崩溃:
05-07 13:02:14.995 14004-14004/com.packagename E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.packagename, PID: 14004
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
Caused …Run Code Online (Sandbox Code Playgroud)