Android初學特訓班 |
|
讀者
更新時間:2017/9/8 下午 03:51:05 |
|
書上第9章ExIntent01程式中的判斷是否已取得授權ActivityCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE);第12章ExLogin程式中的判斷是否已取得授權為checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
想請問 1.checkSelfPermission前面的"ActivityCompat."是否可加可不加? 2.checkSelfPermission裡的第一個參數(this)是否可加可不加?
謝謝老師解惑!
|
|
|
|
讀者
更新時間:2017/9/8 下午 04:14:33 |
|
//requestPermissions 觸發的事件 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1) {... } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } ----------------------------- 另外也想再問一下super.onRequestPermissionsResult(requestCode, permissions,grantResults);這行的作用是如何? (猜測如果requestCode不是1的話會無窮執行onRequestPermissionsResult這個函式?) |
|
|
|
文淵閣工作室
更新時間:2017/9/11 上午 08:45:29 |
|
您好: 第9章 ActivityCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE); 第12章 checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
經測試,這兩種語法都是正確的,使用 ActivityCompat.checkSelfPermission 是標準的語法。
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE}, 1); // 自己定義授權碼為 1 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1) {... } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
requestCode 是自己定義的授權碼,在上面的範例中,我們都定義為 1,因此以 if (requestCode == 1) 確認是自己的授權才處理, requestCode 不是 1 時就不會理會授權問題,但不會無窮執行 onRequestPermissionsResult 方法。
super.onRequestPermissionsResult(requestCode, permissions,grantResults); 參數較複雜,您可以參考這篇文章。
http://givemepass.blogspot.tw/2016/09/runtime-permission.html
|
|
|
|
讀者
更新時間:2017/9/11 下午 02:57:18 |
|
謝謝老師回覆,不過有幾個問題想再確認一下。 1.checkSelfPermission裡的第一個參數可以不填的原因是不是預設值就是為this呢? 2.public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1) {... } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } ---------------------------------------- requestCode若不是1時會執行"super.onRequestPermissionsResult(requestCode, permissions, grantResults);" 想詢問這一行的作用是甚麼,把這行拿掉的話是可行的嗎? |
|
|
|
文淵閣工作室
更新時間:2017/9/12 上午 05:31:10 |
|
1. ActivityCompat. 及 this 可同時移除,程式會正常執行。 2. super.onRequestPermissionsResult 是若未獲得授權就彈出內建 (super) 的請求授權對話方塊。 |
|
|
|
文淵閣工作室
更新時間:2017/9/12 上午 11:09:41 |
|
this 不是預設值,不能省略。 第 12章 ActivityCompat. 及 this 都未加,使用的是 ContextWrapper 套件,此套件為內建,不需 import。 第 9章 ActivityCompat. 及 this 都加,使用的是 ActivityCompat 套件。 兩者要不就都加,要不就都不加,只加入其中之一會產生錯誤。 |
|
|
|
讀者
更新時間:2017/9/12 下午 03:49:26 |
|
謝謝老師的回覆! |
|
|
|
|
|
|