我有一个现有的应用程序,我想实现Android 6.0的运行时权限.我在运行时权限上已经阅读了很多不同的东西,但我似乎无法绕过所有不同的片段.我找到的任何内容实际上都没有显示如何将其实现到现有的Activity中.
当我运行针对SDK v23的现有应用程序时,我得到了预期的权限错误,但我得到的权限错误甚至不是我请求的权限.我在Manifest文件中有SEND_SMS权限,但我得到的错误是READ_SMS.我的应用程序在6.0之前运行正常,没有READ_SMS.
我希望我的应用程序在应用程序启动后立即请求许可,因为应用程序的唯一目的是发送短信,因此没有该权限,该应用程序没有其他用途.
一旦应用程序启动,我如何将SEND_SMS的运行时权限实现到我现有的Activity中?
这些权限的处理是否需要在后台线程中运行?
我是否还需要READ_SMS的权限,因为这是它给出的权限错误(即使该权限从未在我的应用程序上使用过)?
public class MainActivity extends Activity implements OnClickListener {
SimpleCursorAdapter mAdapter;
AutoCompleteTextView txtContract;
EditText txtTrip;
EditText txtDate;
Button btnSend;
Button btnUpdate;
String today;
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
private static final String API_KEY = "abcxyz";
private static final String CONTRACT_REGEX = "^([a-zA-Z0-9_-]){5}$";
private static final String TRIP_REGEX = "^([a-zA-Z0-9_-]){1,10}$";
private static final String DATE_REGEX = "^\\d{2}\\/\\d{2}\\/\\d{4}$";
private static final String PHONE_NUMBER = "1234567890";
private static final …Run Code Online (Sandbox Code Playgroud) 我正在使用Appcelerator工作室来开发我的应用程序.在这个应用程序中,我正在从相机拍照并将它们发布到我的服务器.对于Android 6,我要求用户使用相机的运行时权限.我的代码运行正常.但是,当我在运行时请求相机的许可时.它要求3个权限,
我的问题是为什么当我只使用相机拍照时我会看到所有这些权限,我怎么能摆脱它们呢?
代码段:
if (Ti.Media.hasCameraPermissions()) {
openCamera();
} else {
Ti.Media.requestCameraPermissions(function(e) {
if (e.success) {
openCamera();
} else {
alert('You denied permission');
}
});
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
camera android appcelerator android-permissions runtime-permissions
我想获得在我的应用程序中读取短信的权限。这是我的代码:
String permission = Manifest.permission.READ_SMS;
if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED){
permissionList.add(permission);
if (!ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permission)){
requestPermissions(new String[]{permission}), SMS_PERMISSION);
}
}
Run Code Online (Sandbox Code Playgroud)
我没有收到确认许可请求的对话框。对于其他权限(如WRITE_STORAGE, READ_CONTACTS),我得到了这个对话框。你知道如何解决吗?
方法onRequestPermissionsResult告诉我未授予许可。但它可以工作,没有确认对话框。
我发现很多类似的主题具有相同的威胁,但我仍然找不到解决我的问题的方法。我编写此代码是为了向应用程序授予写入权限,但没有显示对话框。我在监视器中收到“无写入权限”消息。
if(ContextCompat.checkSelfPermission(getContext(),Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
Log.i("permissions", "No writing permission");
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225);
Run Code Online (Sandbox Code Playgroud)
我在AndroidManifest文件中添加了权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
改变了目标sdk targetSdkVersion 23,我正在使用android 6.0.1。
编辑: 我也绑定了这段代码,但它仍然不起作用
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225);
Run Code Online (Sandbox Code Playgroud) 对不起,我的英语不好.
Activity我的应用程序中有多个,我需要集中运行时应用程序权限.
我需要使用BaseActivity吗?
如果是,请建议我如何Activity在应用程序中的许多情况下处理它.
如果不是,请建议更好的方法来处理它.
我想减少代码冗余.没有兴趣一次又一次地编写相同的代码Activity.
我正在寻找负面情况,其中用户拒绝了许可,我必须显示理性,而不是继续要求允许.并基于我必须提供消息或我必须更新UI
在请求授予 Android 危险权限期间,是否有任何方法可以发送捆绑包/附加内容(就像我们对意图所做的那样)?
在为android授予危险权限的正常过程中,我们应该ActivityCompat.requestPermissions(...)根据文档调用如下定义:
void requestPermissions (Activity activity, String[] permissions,int requestCode)
Run Code Online (Sandbox Code Playgroud)
可以看出,没有选项可以在权限请求中发送任何额外信息。目前,我在活动中使用静态参数在获得我的许可后恢复它们。
我想知道有什么选择吗?
android-permissions android-bundle runtime-permissions dangerous-permissions
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_camera, container, false);
cameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
flipCamera = view.findViewById(R.id.flipCamera);
flashCameraButton = view.findViewById(R.id.flash);
captureImage = view.findViewById(R.id.captureImage);
surfaceView = view.findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
flipCamera.setOnClickListener(this);
captureImage.setOnClickListener(this);
flashCameraButton.setOnClickListener(this);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if (Camera.getNumberOfCameras() > 1) {
flipCamera.setVisibility(View.VISIBLE);
}
if (!getActivity().getBaseContext().getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FLASH)) {
flashCameraButton.setVisibility(View.GONE);
}
return view;
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (!openCamera(Camera.CameraInfo.CAMERA_FACING_BACK)) {
alertCameraDialog();
}
}
private boolean openCamera(int id) {
boolean result = false;
cameraId …Run Code Online (Sandbox Code Playgroud) 在将其标记为重复之前,请注意这不是授予被测应用程序权限,而是授予测试 apk 本身。
在我的应用程序中,有一个功能可以从Download目录 ( /sdcard/download)中获取文件,对其进行验证,然后将其复制到应用程序的私有存储 ( /data/data/com.package.myapp/files/) 中,以便在需要时可以使用该文件。
为了测试这个功能,我需要在Download目录中放置一些测试文件:一些是已知有效的,另一些是已知无效的文件。我已将这些文件放在组中的assets目录中androidTest。
在我的测试类中,我有一个@BeforeClass public static void prepareAssets()方法,它的工作是在导入和验证测试实际运行之前从assets目录中获取这些文件并将它们复制到Download文件夹中。
此准备步骤失败:
04-12 00:25:19.282 11231-11246/? E/TEST: Failed to prepare test assets
java.io.FileNotFoundException: /storage/emulated/0/Download/test1.jpg (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
at ca.mahram.android.testextstorexfer.CopyUtil.copy(CopyUtil.java:20)
at ca.mahram.android.testextstorexfer.ExampleInstrumentedTest.prepareAssets(ExampleInstrumentedTest.java:54)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at …Run Code Online (Sandbox Code Playgroud) 我已经创建了 WebView Activity 并加载了https://web.doar.zone/coronavirus
这个 URL 需要相机权限,我在 Android 中获得了运行时权限。
这是MainActivity.java的完整代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Context context;
ActivityMainBinding binding;
private String url = "https://web.doar.zone/coronavirus";
@Override
protected void onResume() {
super.onResume();
checkCameraPermission();
}
private void checkCameraPermission() {
int writeExternalStorage = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1001);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode …Run Code Online (Sandbox Code Playgroud) android webview android-webview android-permissions runtime-permissions
我已经从 React Native cli 安装了很棒的项目并在 Android 构建中运行它。效果很好。
当我添加时,低于危险许可
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
在我的 android manifest.xml 中并运行该项目,它是在应用程序安装时自动授予的。
我检查了应用程序信息,默认情况下已授予该权限。
笔记:
因此,当我以编程方式检查权限时,它总是被授予。不应该。