Android9获取权限闪退,Android 9.0 关于ACTION_CALL无权限导致闪退的问题
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙上线发布会,华为 HarmonyOS
- 下一篇: 小米10谷歌连携失败_Android 1