Android 开发 第一天

开发语言:Java

开发工具:Android Studio 3.5 RC 2  JDK1.8

SDK:API 29 Android 10.0

1.电话拨号器的实现

项目说明:这个小小的项目设计一个权限的问题。查看文档:https://developer.android.google.cn/training/permissions/requesting?hl=en,页面如下

说了一大堆,最后翻到后面,说有一个例子,点进去研究了一会,似乎找到了灵感。

模拟器中的界面如下:软件安装后的界面,右边是拨打界面

      

Module相关文件的代码如下:

res/layout/activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/mLayout"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/title" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/title"
        android:id="@+id/edit1"
        android:inputType="number"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="makeCall"
        android:text="@string/buttonText"
        />
</LinearLayout>

AndroidManifest.xml清单文件需要提供 <user-permission android:name="android.permission.CALL_PHONE" />

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aaa.phoneCall">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
</manifest>

res/values/string.xml文件

<resources>
    <string name="app_name">01_电话拨号器</string>
    <string name="title">输入电话号码</string>
    <string name="buttonText">拨打电话</string>
    <string name="grant">不给授权,就不给你用</string>
    <string name="call_phone">请授予权限用于拨打电话</string>
    <string name="ok">Okay</string>
    <string name="call_phone_denied">获取拨号权限被拒绝</string>
    <string name="yes">软件运行需要CALL_PHONE权限</string>
</resources>

MainActivity.java文件

package com.aaa.phoneCall;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.core.app.ActivityCompat;

import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback{

    private static final int MY_CODE = 0;
    private EditText editText;
    LinearLayout mLayout ;
    private final static String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.edit1);
        mLayout = findViewById(R.id.mLayout);

    }
    public void makeCall(View view){
        getPermission();
    }
    public void getPermission() {
        String[] permissions = {Manifest.permission.CALL_PHONE};
        int code = ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE);
        if(code == PackageManager.PERMISSION_GRANTED ){     // got the CALL_PHONE permission.
           startCall();     // make the call
        }else {     // didn't got the CALL_PHONE permission.
                requestCallPhonePermission();   // request the CALL_PHONE permission
        }
    }
    public void requestCallPhonePermission(){
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE)) { // didn't got CALL_PHONE permission.
            Toast.makeText(getApplicationContext(),R.string.yes,Toast.LENGTH_LONG).show();              // tip the app run need the permission
        }else{
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE}, MY_CODE);
        }
    }
    public void startCall(){
        String number = editText.getText().toString().trim();      // get the phone number.
        Log.i(TAG, "makeCall: "+number);
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:"+number));
        startActivity(intent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
        if (requestCode == MY_CODE ) {     // Request for CALL_PHONE permission.
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getApplicationContext(),R.string.yes,Toast.LENGTH_LONG).show();
                startCall();
            } else {        // Permission request was denied.
                Snackbar.make(mLayout, R.string.call_phone_denied,Snackbar.LENGTH_SHORT).show();
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/kevinOnes1/p/11318533.html