我真的需要请求运行时权限吗?

时间:2017-07-08 21:22:08

标签: android

运行时权限对于确保您的应用程序在Android 6+设备上获得所需的运行权限至关重要,但是,似乎一些顶级开发人员(gameloft,ea游戏)不需要实现运行时权限,并且他们对目标SDK 22非常满意。所以我的问题是:

  1. 为什么我需要承担添加运行时权限的痛苦,当我可以留在api 22时。这也会节省一些代码行。

  2. 应用发布后,是否可以从目标SDK 22升级到目标SDK 23?如果我打算暂时停留在SDK 22上。似乎降级是不可能的。 &#34; 请注意,一旦您发布了APK目标API级别23或更高级别,您就无法在任何渠道上提交针对API级别22或更低级别的更新。&#34; < / p>

1 个答案:

答案 0 :(得分:3)

  

为什么我需要承担添加运行时权限的痛苦,当我可以留在api 22时

你的“我可以留在api 22”假设可能不会随着时间的推移而保持良好状态。例如,系统会告诉用户您的应用与多窗口不兼容。

此外,用户看到该应用程序在安装时不会立即支持运行时权限,因为它们会在经典安装时权限对话框中提示。随着时间的推移,用户会开始认为显示该对话框的应用已过期且未进行维护,因此他们可能无法安装您的应用。

此外,您可能想要使用的某些第三方库可能会坚持更高import 'package:flutter/material.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePageState createState() => new MyHomePageState(); } class MyCustomCard extends StatelessWidget { MyCustomCard({ this.colors }); final MaterialColor colors; Widget build(BuildContext context) { return new Container( alignment: FractionalOffset.center, height: 144.0, width: 360.0, decoration: new BoxDecoration( color: colors.shade50, border: new Border.all(color: new Color(0xFF9E9E9E)), ), child: new FlutterLogo(size: 100.0, colors: colors), ); } } class MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin { AnimationController _controller; Animation<double> _frontScale; Animation<double> _backScale; @override void initState() { super.initState(); _controller = new AnimationController( vsync: this, duration: const Duration(seconds: 1), ); _frontScale = new Tween( begin: 1.0, end: 0.0, ).animate(new CurvedAnimation( parent: _controller, curve: new Interval(0.0, 0.5, curve: Curves.easeIn), )); _backScale = new CurvedAnimation( parent: _controller, curve: new Interval(0.5, 1.0, curve: Curves.easeOut), ); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { ThemeData theme = Theme.of(context); return new Scaffold( appBar: new AppBar(), floatingActionButton: new FloatingActionButton( child: new Icon(Icons.flip_to_back), onPressed: () { setState(() { if (_controller.isCompleted || _controller.velocity > 0) _controller.reverse(); else _controller.forward(); }); }, ), body: new Center( child: new Stack( children: <Widget>[ new AnimatedBuilder( child: new MyCustomCard(colors: Colors.orange), animation: _backScale, builder: (BuildContext context, Widget child) { final Matrix4 transform = new Matrix4.identity() ..scale(1.0, _backScale.value, 1.0); return new Transform( transform: transform, alignment: FractionalOffset.center, child: child, ); }, ), new AnimatedBuilder( child: new MyCustomCard(colors: Colors.blue), animation: _frontScale, builder: (BuildContext context, Widget child) { final Matrix4 transform = new Matrix4.identity() ..scale(1.0, _frontScale.value, 1.0); return new Transform( transform: transform, alignment: FractionalOffset.center, child: child, ); }, ), ], ), ), ); } }

所以,从技术上讲,你可以拥有任何你想要的targetSdkVersion,但是有成本。

  

这也可以保存一些代码行。

不一定。用户仍然可以在“设置”中撤消这些权限,因此您可能需要比以前更多的错误处理代码。

  

应用发布后,是否可以从目标SDK 22升级到目标SDK 23?

一般来说,是的。

相关问题