zoukankan      html  css  js  c++  java
  • Android开发智能车载App(3)---电话报警 报警测试实现

    1.进行电话拨号

    首先在Mainfest清单中添加拨号权限


    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.guxin.a01_helloworld"> <!-- 拨号权限 --> <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" 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>
    </manifest>

      然后,通过检测权限是否进行给予,进行下一步操作MainActivity.java如下:

    
    

    /************************************************************   
    Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.   
    FileName: MainActivity.java
      
    Author:    Zhou Baohui    
    Version :  1.0    
    Date:   2018 5 10
    Description:  主界面Activity,通过监测按钮是否被点击进行拨打电话的操作

            拨打电话时,需要给予App权限,检测权限是否给予

            当未获取到权限时,请求获取权限,当检测到权限已获取时,拨打电话 

       
    Version:       // 版本信息 
      
    Function List:    // 主要函数及其功能     
    1.callphone     进行打电话的操作
     History: 
      // 历史修改记录 
          
    <author>  <time>   <version >   <desc>       
    BaoHUi    18/5/10     1.0     build this moudle   

    
    

    ***********************************************************/ 

    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.provider.Settings;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;
        private Button btn_dial;
        private EditText et_number;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 找到控件
            et_number = (EditText) findViewById(R.id.et_number);
            btn_dial = (Button) findViewById(R.id.btn_dial);
    
            // 给按钮设置监听(点击事件)
            btn_dial.setOnClickListener(new View.OnClickListener() { // 匿名内部类
                // 按钮点击时回调
                @Override
                public void onClick(View view) {
                    // 检查是否获得了权限(Android6.0运行时权限)
                    if (ContextCompat.checkSelfPermission(MainActivity.this,
                            Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
                        // 没有获得授权,申请授权
                        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                                Manifest.permission.CALL_PHONE)) {
                            // 返回值:
                            // 如果app之前请求过该权限,被用户拒绝, 这个方法就会返回true.
                            // 如果用户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个方法会返回false.
                            // 如果设备策略禁止应用拥有这条权限, 这个方法也返回false.
                            // 弹窗需要解释为何需要该权限,再次请求授权
                            Toast.makeText(MainActivity.this, "请授权!", Toast.LENGTH_LONG).show();
    
                            // 帮跳转到该应用的设置界面,让用户手动授权
                            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", getPackageName(), null);
                            intent.setData(uri);
                            startActivity(intent);
                        }else{
                            // 不需要解释为何需要该权限,直接请求授权
                            ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]{Manifest.permission.CALL_PHONE},
                                    MY_PERMISSIONS_REQUEST_CALL_PHONE);
                        }
                    }else {
                        // 已经获得授权,可以打电话
                        CallPhone();
                    }
                }
            });
        }
    private void CallPhone() {
            String number = et_number.getText().toString();
            if (TextUtils.isEmpty(number)) {
                // 提醒用户
                // 注意:在这个匿名内部类中如果用this则表示是View.OnClickListener类的对象,
                // 所以必须用MainActivity.this来指定上下文环境。
                Toast.makeText(MainActivity.this, "号码不能为空!", Toast.LENGTH_SHORT).show();
            } else {
                // 拨号:激活系统的拨号组件
                Intent intent = new Intent(); // 意图对象:动作 + 数据
                intent.setAction(Intent.ACTION_CALL); // 设置动作
                Uri data = Uri.parse("tel:" + number); // 设置数据
                intent.setData(data);
                startActivity(intent); // 激活Activity组件
            }
        }
    
        // 处理权限申请的回调
        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            switch (requestCode){
                case MY_PERMISSIONS_REQUEST_CALL_PHONE: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // 授权成功,继续打电话
                        CallPhone();
                    } else {
                        // 授权失败!
                        Toast.makeText(this, "授权失败!", Toast.LENGTH_LONG).show();
                    }
                    break;
                }
            }
    
        }
    }

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/suifengye/p/9022094.html
Copyright © 2011-2022 走看看