脚步: 从Fragment或Activity请求许可 在onRequestPermissionsResult()显示DialogFragment 抛出java.lang.IllegalStateException : onSaveInstanceState后无法执行此操作 这是不会发生,当我显示对话后,延迟(使用postDelayed)。 根据http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html )我们可以在onPause()和onStop()之间commit() onStop()没有任何状态丢失或EXCEPTION。 这里是一个示例项目源,日志文件和logging问题的链接。 https://drive.google.com/folderview?id=0BwvvuYbQTUl6STVSZF9TX2VUeHM&usp=sharing 另外我已经打开了一个问题https://code.google.com/p/android/issues/detail?id=190966,但它被标记为WorkingAsIntended,他们build议只是捕捉exception。 但是这并不能解决问题。 我知道解决它的其他方法,但不是这个android的bug? 更新 bug的状态再次被“分配”。 希望很快就能解决。 我的临时解决scheme是 new Handler().postDelayed(new Runnable() { @Override public void run() { // do your fragment transaction here } }, 200);
背景 关于如何处理SD卡和存储,Android有了很多变化: API 3 – 您获得所有访问权限,不需要任何权限 API 4-15 – 您需要使用WRITE_EXTERNAL_STORAGE,并获得所有权限。 API 16-18 – 如果您只想阅读,请使用READ_EXTERNAL_STORAGE API 19-20 – 除非您的应用程序是系统应用程序,否则您无法读取或写入辅助外部存储(SD卡),或者您拥有root用户。 API 21-22 – 为了访问SD卡,您需要向用户请求权限,并使用DocumentFile API而不是File API。 这引发了很多问题,正如我在这里和这里写的 。 从API 23开始(Android 6),事情似乎又改变了… 问题 对于API 23,至less有两件新事物是与存储相关的: “ 可采用的存储设备 ” – 用户可以select将SD卡作为主外部存储设备。 作为新的权限机制 (在运行时请求权限)的一部分,似乎存储也是用户需要确认的权限。 这适用于READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE 由于没有安装SD卡的Android 6设备,而且由于模拟器本身并不具备使用SD卡的能力,所以仍然不可能知道发生了什么。 问题 SD卡是否使用File-API而不是DocumentFile访问? 如果我想要访问所有的外部存储path(包括SD卡),这是否意味着我需要两次请求这个权限:一个用于主外部存储,一个用于SD卡? 在手动授予权限之前,SD卡上的文件是否可以以任何方式访问? 假设用户select使用“可采用的存储设备”,这对于检索应用文件path的各种function意味着什么? 例如:getFilesDir,getExternalFilesDir,…? getExternalFilesDirs的oder会因为它而改变吗? 当用户将应用程序从SD卡上移动到SD卡时(使用“可采用的存储设备”),应用程序的文件会发生什么变化? 关于SD卡上的应用程序文件呢? 他们会留下吗? 或者他们会搬到什么地方? 例如,如果应用程序在SD卡上具有“file1.txt”,则path为“/ storage […]
我在AndroidManifest中声明了一些接收器: <!– no warning –> <receiver android:name=".receivers.TriggerMonitoringBootReceiver" android:enabled="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <!– no warning –> <receiver android:name=".receivers.ScanResultsReceiver" android:enabled="false"> <intent-filter> <action android:name="android.net.wifi.SCAN_RESULTS" /> </intent-filter> </receiver> <!– warning : Exported receiver does not require permission–> <receiver android:name=".receivers.BatteryMonitoringReceiver" android:enabled="false"> <intent-filter> <action android:name="@string/intent_action_setup_alarm" /> <action android:name="@string/intent_action_cancel_alarm" /> <action android:name="@string/intent_action_monitor" /> </intent-filter> </receiver> 第一个是为了接收一个BOOT_COMPLETED动作。 第二个意思是接收android.net.wifi.SCAN_RESULTS 。 第三个是为了接收我广播的一些动作(intent_action_monitor)和一些由AlarmManager […]
我试图让我的应用程序准备好新的Android M权限更改,并发现一些奇怪的行为。 我的应用程序使用相机意图机制,允许用户从相机获取图片。 但在另一个活动需要使用相机的权限相机本身(因为一个库依赖card.io需要这个)。 但是,当我尝试启动相机意向时,只需要相机意图的M中的活动就会出现以下故障(如果从Manifest中删除相机权限,则不会发生这种情况) > 09-25 21:57:55.260 774-8053/? I/ActivityManager: START u0 > {act=android.media.action.IMAGE_CAPTURE flg=0x3000003 > pkg=com.google.android.GoogleCamera > cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity > (has clip) (has extras)} from uid 10098 on display 0 09-25 > 21:57:55.261 774-8053/? W/ActivityManager: Permission Denial: starting > Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3000003 > pkg=com.google.android.GoogleCamera > cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity > (has clip) (has extras) } from null […]
在API 23的运行时需要哪些权限请求权限?
在Android Marshmallow中,应该在运行时需要权限,而不是一次安装应用程序。 但是,我似乎只能从一个活动请求权限,这是一个问题,因为我的应用程序只包含服务。 (为什么你可能会问这个应用有一个捆绑在里面的Android Wear手表,而手机所做的就是查看附近的照片发送到手表 – 不需要任何活动,但是它需要位置权限。 那么,有没有办法从服务请求权限? 或者以某种方式像过去一样强制安装时授予权限?
我知道Android 6.0具有新的权限,我知道我可以用这样的东西来调用它们 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, PERMISSION_WRITE_STORAGE); } 今天我看到一个需要3个权限的Google应用程序:联系人,短信和相机。 它正在制作第1-3页,并同时将它们全部召集起来激活。 任何人都可以告诉我如何可以调用4个权限来激活同时像短信,相机,联系人和存储? 例子(忘了谷歌应用程序的名称:() 该应用程序需要短信,联系人和相机 该应用程序问我(并做了一个对话页1-3)激活短信,激活联系人,然后相机。 所以这个谷歌应用程序一起调用所有3个必要的权限,我的问题是我如何达到相同?
我正在尝试制作一个应用程序,例如,当电话打到电话上时,我想检测电话号码。 下面是我试过的,但是没有检测到来电。 我想在后台运行我的MainActivity ,我该怎么做? 我已经在manifest文件中给予了许可。 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 还有什么我应该提供清单? public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_layout); } public class myPhoneStateChangeListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); if (state == TelephonyManager.CALL_STATE_RINGING) { String phoneNumber = incomingNumber; } } } }