纯纯纯小白学习记录
学习资料:郭霖老师《第一行代码》第2版
在之前的Android版本中,开发者只需要在AndroidMainfest.xml中声明即可,
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
......
<uses-permission android:name="android.permission.CALL_PHONE"/>
.........
</manifest>
Android6.0之后系统中引入了运行时权限这个功能,开发者除了在AndroidMainfest.xml声明权限外,还需要在程序运行的过程中动态去申请相应权限
本小白以一个拨打电话的Demo为例
新建一个ActionCallDemo,在MainActivity中绘制一个按钮,按下按钮的时候进行拨打电话操作
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:padding="15dp">
<!--拨打电话-->
<Button
android:id="@+id/call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/call_10086"(text文本应在@string中声明,规范代码编写)
android:textAllCaps="false"/>
</LinearLayout>
MainActivity.clss
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_PHONE_CALL_CODE = 1; // 权限请求码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mCall = (Button) findViewById(R.id.call);
mCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 程序运行时申请打电话权限
// 判断用户是否授权
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
// 用户没有授权,申请权限
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},REQUEST_PHONE_CALL_CODE);
} else {
// 用户已授权,执行拨打电话操作
call();
}
}
});
}
/* 用户点击按钮拨打电话 */
private void call() {
try {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
} catch (SecurityException e) {
e.printStackTrace();
}
}
/**
* 用户通过ActivityCompat.requestPermissions申请权限之后
* 都会回调到onRequestPermissionsResult方法中
* @param requestCode 请求码
* @param permissions 权限组
* @param grantResults 授权结果
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 判断最后的授权结果
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 申请权限通过,执行拨打电话操作
call();
} else {
Toast.makeText(this, "您拒绝该权限", Toast.LENGTH_LONG).show();
}
}
}
}