日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android9获取权限闪退,Android 9.0 关于ACTION_CALL无权限导致闪退的问题

發布時間:2025/3/19 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android9获取权限闪退,Android 9.0 关于ACTION_CALL无权限导致闪退的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 9.0 關于ACTION_CALL無權限導致閃退的問題

18年年底畢業,開始從事android研發,對application層有興趣,于是自學使用Android studio對app的簡單開發。其實上學的時候學了一點用eclipse實現的UI設計,不過現在用著studio,就是 真香。

人生第一篇的博文,廢話不多說,切入主題。

學習到用Intent啟用程序的method,跟著書上寫了一個撥打電話的示例。Intent的action采用ACTION_CALL, 同時Data采用自己的電話號碼。

在XML中添加button,寫好布局后,在MainActivity中添加具體函數

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void callmyself(View v){//添加button onclick響應函數

Intent it = new Intent();

it.setAction(Intent.ACTION_CALL);//ACTION_CALL實現撥號

it.setData(Uri.parse("tel:+86***********"));//實現具體撥什么號

startActivity(it);

}

書中也提示到要添加撥號權限。在AndroidManifest中添加權限

package="com.pao.penghao6.test">

//添加權限

...................................

直接運行一下試試。結果再點擊button的時候就crash down了。

出現如下結果

log如下:

.at com.pao.penghao6.test.twoActivity.callmyself(MainActivity.java:33)

Caused by: android.os.RemoteException: Remote stack trace:

at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1788)

at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:717)

at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:544)

at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:1099)

at com.android.server.am.ActivityStarter.execute(ActivityStarter.java:486)

顯然這么簡單的程序,如果不是SDK對Intent有很大的更新的話,因該不是這些內置函數的問題,看log還是不懂發生了什么。

后來想如果ACTION_CALL導致activity起不來的話,那我可以換一個可以起來的action,來驗證問題就是ACTION_CALL。

于是修改了setAction

it.setAction(Intent.ACTION_VIEW);

再次運行,于是得到一下結果

能夠正確打開撥號界面,并填入data的數據,ACTION_CALL實現。這樣確定了問題就是出在ACTION_CALL這里

于是又百度了好久。很多博文都說需要確認權限是否添加。但之前已經在AndroidManifest中添加。所以一直沒想通。直到看到一個回復說Android6以上需要動態開啟權限。這才回歸正道。于是查閱動態開啟權限的方法。修改代碼如下

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_two);

}

public void goback(View v){

finish();

}

public void callmyself(View v){

Intent it = new Intent();

//調用checkSelfPermission檢查是否有權限

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)== PackageManager.PERMISSION_GRANTED) {

it.setAction(Intent.ACTION_CALL);//有權限則直接ACTION_CALL

it.setData(Uri.parse("tel:+86***********"));

startActivity(it);

}else{

ActivityCompat.requestPermissions(this,new String []{Manifest.permission.CALL_PHONE},1);//無權限則詢問開啟權限

it.setAction(Intent.ACTION_CALL);

it.setData(Uri.parse("tel:+86***********"));

startActivity(it);

}

}

最終終于看到詢問權限開啟的提示框

用實機run,收到來電。

總結

1.需要在AndroidManifest中添加權限

2.對較新版本的Android,需要采用動態權限調用

總結

以上是生活随笔為你收集整理的Android9获取权限闪退,Android 9.0 关于ACTION_CALL无权限导致闪退的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。