1. 程式人生 > >android應用執行中,在設定中修改許可權,返回應用崩潰

android應用執行中,在設定中修改許可權,返回應用崩潰

許可權管理

我程式中使用了PermissionsDispatcher進行許可權的管理,具體使用方法,參考Android 6.0執行時許可權詳解

問題重現

使用PermissionsDispatcher進行程式管理,在程式執行過程中,申請許可權和拒絕許可權都不會出現問題,後來發現,在程式執行過程中,比如進入某個頁面,然後點選home鍵,在設定中,選擇該應用,關閉某個許可權,再返回該應用,點選back鍵,會出現閃退的情況,跟蹤log,發現是某個欄位變成了Null,剛開始以為程式問題,後來除錯時發現,在設定修改許可權以後,程式程序變成了dead,如圖:
在這裡插入圖片描述
發現微信的操作方法就是,設定關閉某個許可權,就重新啟動。
最初的解決辦法,是在onResume方法裡邊,先儲存一下現有許可權,進入介面以後,再重新獲取一下許可權,看看有沒有改變,如果許可權改變,就重新進入啟動頁,重新獲取資料,但是失敗了,因為程序已經被殺死了,不會再走onResume方法。
最後的解決辦法:在一個Activity的基類的onCreate方法中,判斷savedInstanceState是否為null,如果為null,說明是正常啟動,如果有資料,就是設定被修改,異常關閉情況下,程式會儲存一些資料,所以在有資料的情況下,重新開啟啟動頁。

 protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Log.e("onCreate","savedInstanceState:"+savedInstanceState);
        if(savedInstanceState!=null){
            Intent intent=new Intent(UI.this, SplashActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
        }
    }

除錯結果:
在這裡插入圖片描述
savedInstanceState:null是正常啟動的情況,savedInstanceState有資料,是修改過許可權,返回當前頁面的情況,所以根據有沒有資料,可以決定是否重新開啟啟動頁。

相關推薦

android應用執行設定修改許可權返回應用崩潰

許可權管理 我程式中使用了PermissionsDispatcher進行許可權的管理,具體使用方法,參考Android 6.0執行時許可權詳解。 問題重現 使用PermissionsDispatcher進行程式管理,在程式執行過程中,申請許可權和拒絕許可權都不會

Android 7.0 移除設定的某些項(輔助功能、流量使用情況、位置資訊)(MTK)

--- a/packages/apps/Settings/src/com/android/settings/SettingsActivity.java +++ b/packages/apps/Settings/src/com/android/settings/SettingsActivity.jav

Android應用設定裡關閉許可權返回生命週期處理

問題 在處理6.0執行時許可權時,很多人都忽略了這樣一個問題: 在一個App應用裡,如果已經允許了一個許可權比如(讀取通訊許可權),此刻去呼叫相機,彈出許可權申請對話方塊,此刻點選拒絕,然後經過處理後彈出去設定許可權介面(因為許可權總歸是要申請),如果再在置介面裡開啟應用許

Qt android 設定系統狀態列為全透明半透明、全屏設定狀態列顏色修改程式圖示

實現Qt平臺下,安卓系統狀態列的相關設定(全透明,半透明、全屏,設定狀態列顏色,修改程式圖示,網上文章大多數提供多種方法,但是講述的雲裡霧裡,沒有說清楚,以下是本人自己整理,希望大家相互交流學習) 實驗環境: Qt 5.12 程式語言:qml 和 c++ 執行平臺:android 正

Table裡td的文字過長設定不換行隨內容同行顯示

      初次用nowarp點這裡: nowrap教程   做Java的又要搞前端,有時候調樣式有點煩躁,專案中前端頁面都是自己寫的,這裡分享一個常見的樣式調整,雖然很簡單,但是沒用過的情況下還真不知道怎麼調        當td中內容過長時,內容會溢位,換行顯示,美觀超

Android擁有系統許可權設定允許安裝未知來源的應用

關於系統設定的程式碼,基本都在android.provider.Settings類中。仔細檢視Settings類,可以找到如下的常量值: /** * Whether applications can be installed

linux下mysql的解除安裝安裝忘記密碼修改密碼允許遠端連線的設定

一、linux下mysql的解除安裝        檢視已經安裝了的MySql的包              rpm -qa|grep -i mysql [[email protected] ~]# rpm -qa|grep -i mysql MySQL-c

android 適配華為透明狀態列 保留虛擬導航鍵設定狀態列透明設定狀態列文字顏色為黑色

設定後狀態列不遮擋底部contentview裡的內容,但是狀態列上的圖示文字顏色和我的主題色白色混在一起了 public static void setTranslucentKeepVirtualNav(Activity activity) { if (Build.VERSIO

Android 利用FileProvider安裝apk一定要宣告許可權避免當成未知應用被阻止安裝

首先看看我們利用FileProvider來安裝apk的常規操作 /** * 通過隱式意圖呼叫系統安裝程式安裝APK */ public void install(Context conte

關於除錯----在單步執行某個程式的中間修改原始碼修改程式碼之後移動到下一步時偵錯程式自動在執行下一語句之前重新編譯

在單步執行某個程式的中間修改原始碼,當修改程式碼之後移動到下一步時,偵錯程式自動在執行下一語句之前重新編譯。所以說如果編譯過程中出了問題,修改了程式,即使不手動停止重新啟動程式,直接執行的話也沒有問題的,編譯器會預設重新編譯啟動。

android http post請求設定utf-8編碼服務端還是出現中文亂碼 解決

 HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(url);List<NameValuePair> params = new ArrayList&

koa2獲取圖片並返回設定靜態檔案目錄訪問本地檔案

// uri: 'http://images5.fanpop.com/image/photos/30900000/beautiful-pic-different-beautiful-pictures-30958249-1600-1200.jpg'

C# DataGridView匯出Excel設定單元格合併隱藏行

不得不承認,做程式需要研究。 DataGridView匯出Excel的原始碼 using System.Windows.Forms;using System.Collections.Generic;using System;using Microsoft.Office.In

iview的tree元件設定expand不生效以及全部展開和全部合併的實現

前端框架用到了iview,使用tree元件的時候,資料是動態繫結的,頁面控制元件呼叫如下: <Tree :data="taskTreeData"></Tree> methods中初始化資料的方法如下: initTree() { let _this

MySQL8.0設定遠端訪問許可權Navicat連線mysql

今天centos7安裝了mysql8.0過後遠端登入資料庫報錯 1.首先檢視防火牆狀態 systemctl status firewall.service  防火牆沒有執行 2.命令登入伺服器mysql 3.執行下面語句新增許可權 use mysql; se

aws s3儲存空間設定預設公開許可權

一、開啟需要配置的bucket1、json配置解析文件https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/example-bucket-policies-vpc-endpoint.html2、控制檯自動生成配置http:

Jedis簡介Jedis連線 HelloWorld實現設定redis連線密碼Jedis 連線池例項

Jedis簡介 實際開發中,我們需要用Redis的連線工具連線Redis然後操作Redis, 對於主流語言,Redis都提供了對應的客戶端; Jedis連線 HelloWorld實現 建一個Maven專案, pom里加下jedis依賴, 1 2 3 4

aop使用在資料修改記錄修改的欄位的歷史版本記錄

配置在其他文章,提到過, 貼上程式碼 package com.audaque.collection.aop; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor;

一個數據庫查詢方法(可以動態設定查詢引數設定查詢條件)很巧妙的組合sql語句

public <T> QueryResult<T> getScrollData(Class<T> entityClass,String wherejpql,Object[] queryParams,   int firstindex, in

python利用Matplotlib設定座標刻度大小字型/設定圖例大小及字型/設定縱橫座標名稱及字型及大小

# coding: utf-8 import matplotlib.pyplot as plt # figsize = 11, 9 # figure, ax = plt.subplots(figsize = figsize) x1 =[0,5000,10000