zoukankan      html  css  js  c++  java
  • Android小应用之拨号器

    首先看一下Android Studio下怎么设置应用的ICON

    image

    image

    Activity的onCreate()方法

    当界面刚被创建时会回调此方法,super.onCreate()执行父类的初始化操作,必须要加上。

    界面设计:

    image

    分析:

    TextView

    Edit

    RelativeLayout:相对布局

    在字符串上用"Alt+Enter"可以Extract资源。

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/title"/>

    @string是引用字符串资源里面的变量,避免硬编码,方便国际化。

    两个title不会冲突,因为存在于不同的内部类中。

    按钮事件

    打开另一个Activity

    Intent

    Intent的常量ACTION

    添加拨打电话的权限

    package com.example.tuhooo.callyou;
    
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.EditText;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /**
         * 拨打此号码的按钮被点击时触发
         * @param v 视图
         */
        public void call(View v) {
    
            System.out.println("进入拨号按钮回调......");
            EditText editNumber = (EditText) findViewById(R.id.number);
            String phoneNumber = editNumber.getText().toString();
    
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_CALL);  // 指定其动作为拨打电话
            String param = "tel:" + phoneNumber;
            System.out.println("拨号参数为:" + param);
            intent.setData(Uri.parse(param));  // 指定将要拨出的号码
    
            try {
                startActivity(intent);  // 执行打电话的
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }

    即使这样写仍会报错,因为在Android 6.0对权限管理进行修改了。

    下面上网上找了一段可行的代码:

    package com.example.tuhooo.callyou;
    
    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /**
         * 拨打此号码的按钮被点击时触发
         * @param v 视图
         */
        public void call(View v) {
    
            System.out.println("进入拨号按钮回调......");
            
            if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                // 没有获得授权, 申请授权
                if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.CALL_PHONE)) {
                    Toast.makeText(MainActivity.this, "请授权!", Toast.LENGTH_LONG).show();
                    Intent applyIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    applyIntent.setData(uri);
                    startActivity(applyIntent);
    
                } else {
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
                }
            } else {
                try {
                    EditText editNumber = (EditText) findViewById(R.id.number);
                    String phoneNumber = editNumber.getText().toString();
    
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_CALL);  // 指定其动作为拨打电话
                    String param = "tel:" + phoneNumber;
                    System.out.println("拨号参数为:" + param);
                    intent.setData(Uri.parse(param));  // 指定将要拨出的号码
                    startActivity(intent);  // 执行打电话的
                } catch (Exception e) {
                    System.out.println(e);
                }
            }
        }
    }

    五大布局Layout:
    LinearLayout线性布局
    RelativeLayout相对布局
    AbsoluteLayout绝对布局
    TableLayout表格布局
    FrameLayout帧布局

  • 相关阅读:
    vmware克隆Centos6.4虚拟机网卡无法启动问题
    mysql错误:Statement violates GTID consistency
    /etc/vsftpd.conf详解
    Linux /etc/fstab文件
    sudo命令详解
    linux fack 文件系统修复命令
    ORA-01502: 索引或这类索引的分区处于不可用状态
    Oracle 完整性约束错误
    linux下部署redis
    Python 发送邮件案例
  • 原文地址:https://www.cnblogs.com/tuhooo/p/7882010.html
Copyright © 2011-2022 走看看