日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

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

Android 9.0 關(guān)于ACTION_CALL無權(quán)限導(dǎo)致閃退的問題

18年年底畢業(yè),開始從事android研發(fā),對application層有興趣,于是自學(xué)使用Android studio對app的簡單開發(fā)。其實上學(xué)的時候?qū)W了一點用eclipse實現(xiàn)的UI設(shè)計,不過現(xiàn)在用著studio,就是 真香。

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

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

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

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void callmyself(View v){//添加button onclick響應(yīng)函數(shù)

Intent it = new Intent();

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

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

startActivity(it);

}

書中也提示到要添加撥號權(quán)限。在AndroidManifest中添加權(quán)限

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

//添加權(quán)限

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

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

出現(xiàn)如下結(jié)果

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有很大的更新的話,因該不是這些內(nèi)置函數(shù)的問題,看log還是不懂發(fā)生了什么。

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

于是修改了setAction

it.setAction(Intent.ACTION_VIEW);

再次運行,于是得到一下結(jié)果

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

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

@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();

//調(diào)用checkSelfPermission檢查是否有權(quán)限

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

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

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

startActivity(it);

}else{

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

it.setAction(Intent.ACTION_CALL);

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

startActivity(it);

}

}

最終終于看到詢問權(quán)限開啟的提示框

用實機run,收到來電。

總結(jié)

1.需要在AndroidManifest中添加權(quán)限

2.對較新版本的Android,需要采用動態(tài)權(quán)限調(diào)用

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。