最近在新的Android Marshmallow上遇到了很多关于权限请求对话框的问题。它们听起来像:
如何自定义 Android 权限对话框?
如何为 Android 权限对话框提供自定义文本?
为什么我不能自定义Android权限对话框?
所以这里是所有这些问题的完整答案。
android android-intent android-permissions android-6.0-marshmallow
对于一个权限,我可以在 java 和 kotlin 中使用 permissionsdispatcher - 但是当涉及到这样的多个权限时:
@NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH})
Run Code Online (Sandbox Code Playgroud)
我在 kotlin 上遇到问题 - 它不接受多个参数 - 在 java 上工作正常
尝试显示 URI 时出现以下异常。我认为它发生在我的活动停止并且我再次尝试访问可行的 URI 之后。还有其他问题可以解决这个问题,但我很困惑如何将任何解决方案应用于我的代码,因为我的 takePhotoIntent 允许拍摄或从图库中选择图片(见下文)。
Unable to open content: content://com.android.providers.media.documents/document/image%3A49688
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri
content://com.android.providers.media.documents/document/image%3A49688 from pid=821, uid=10238 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)
我的 createImageFile 和我的 takePhotoIntent:
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp;
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码在我的 SD 卡上创建一个文件夹,但它失败了。这是我写的代码onCreate():
File test = new File(Environment.getExternalStorageDirectory(),"my_directory");
if(!test.exists())
{
try
{
if (test.mkdir())
{
Log.d("xxx", "directory created");
}
else
{
Log.d("xxx", "directory creation failed");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
Log.d("xxx","directory already present");
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时没有给出任何异常,它只是打印
directory creation failed日志。
我也给予了以下许可,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我用的是小米红米note 3,安卓版本是6.0.1。
我一直试图解决这个问题几个小时,我非常沮丧,所以我来找你们一些指导.
我试图保存并检索我创建的用户对象.我想这样做,以便我可以从我的应用程序中的任何意图保存和检索此User对象,所以我决定使用FileInput和Output流.我在下面列出了我的代码.
这是我的输出数据方法:
public static void serializeDataOut(User ish) {
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
File newFile = new File(path + "myFile.ser");
FileOutputStream fos = new FileOutputStream(newFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ish);
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的输入数据方法:
public static User serializeDataIn(){
try{
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
FileInputStream fin = new FileInputStream(path + "myFile.ser");
ObjectInputStream ois = new ObjectInputStream(fin);
User iUser = (User) ois.readObject();
ois.close();
return iUser;
} catch (IOException | ClassNotFoundException e) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取图库图像的路径。我正在获取存储在内部存储中而不是外部存储中的图像的路径。我还启用了已授予的读写存储和相机访问权限。这是我的代码
void ChoosePhoto()
{
try
{
var imageIntent = new Intent();
imageIntent.SetType("image/*");
imageIntent.SetAction(Intent.ActionGetContent);
StartActivityForResult(Intent.CreateChooser(imageIntent, "Select photo"), 0);
}
catch (Exception ex)
{
throw ex;
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_CAPTURE)
{
// camera operation
}
else
{
Console.WriteLine("choose pic from Gallery");
var uri = data.Data;
var path = getRealPathFromURI(uri); //path returns null when i select image from external storage;
}
}
private String getRealPathFromURI(Uri contentURI)
{
string[] …Run Code Online (Sandbox Code Playgroud) android android-gallery xamarin.android xamarin android-permissions
在尝试将 admob 和 api 级别更新为 API 28 后,我收到了以下 Lint 警告:
Missing permissions required by MobileAds.initialize: android.permission.INTERNET
Run Code Online (Sandbox Code Playgroud)
调用这些函数时:
MobileAds.initialize(context, context.getString(R.string.app_id));
mInterstitialAd.loadAd(new AdRequest.Builder().build());
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
我记得android.permission.INTERNET很多年前就不需要了。应用程序无需使用该权限即可访问 Internet。即使在这个应用程序中,我也有一些 Internet 连接并且它们运行成功。我正在检索数据并且它正在工作,甚至还在显示广告。所有这些都未经清单上声明的许可。
为什么 Lint 会显示该警告?
我有一个在下面运行良好的应用程序Android9 phones。最近我开始测试我的应用程序android 9并面临一个奇怪的问题,即简单的 https/http 后调用不起作用,并且 library( com.loopj.android) 给出了一个无法连接的异常。我知道有一个与网络相关的变化,我尝试了我在互联网上找到的所有东西,但仍然没有运气。这是我的配置:
清单.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
tools:targetApi="28"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true">
</application>
Run Code Online (Sandbox Code Playgroud)
res/xml 中的network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">my-backend.hostname.dk</domain>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
我正在使用正确的密钥库签署应用程序: build.gradle:
signingConfigs {
release {
storeFile file("../myApp-release.keystore")
storePassword "abcd1234"
keyAlias "myApp-release"
keyPassword "abcd1234"
}
}
Run Code Online (Sandbox Code Playgroud)
还尝试为 httpclient使用正确的SSLFactory:
AsyncHttpClient client = new AsyncHttpClient();
try {
KeyStore trustStore …Run Code Online (Sandbox Code Playgroud) ssl android android-permissions android-security android-9.0-pie
我的片段正在尝试启动相机活动,但似乎存在一些相机权限问题,
在调试时,它只持续到代码行以下
startActivityForResult(callCameraApplicationIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)
下面是 logcat 结果
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=android/com.android.internal.app.ResolverActivity clip={text/uri-list U:content://com.example.tc.provider/external_files/Pictures/photo_saving_app/IMAGE_20191205_070208.jpg} (has extras) } from ProcessRecord{8920903 18662:com.example.tc/u0a343} (pid=18662, uid=10343) with revoked permission android.permission.CAMERA
at android.os.Parcel.readException(Parcel.java:2016)
at android.os.Parcel.readException(Parcel.java:1962)
at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4452)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1617)
at android.app.Activity.startActivityForResult(Activity.java:4551)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
Run Code Online (Sandbox Code Playgroud)
以下是似乎需要的代码部分。
if (Build.VERSION.SDK_INT > 21) { //use this if Lollipop_Mr1 (API 22) or above
Intent callCameraApplicationIntent = new Intent();
callCameraApplicationIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
// We give some instruction to the intent to save the image
File photoFile = null;
try { …Run Code Online (Sandbox Code Playgroud) android android-manifest android-camera android-camera-intent android-permissions