首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现Android App直呼

实现Android App直呼
EN

Stack Overflow用户
提问于 2019-01-02 10:01:46
回答 1查看 343关注 0票数 0

当用户单击按钮时,我想从我的应用程序进行呼叫,但当第一次单击按钮时,会弹出权限对话框,但在授予权限后,呼叫不会通过start activity.Please help me out激活

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {
EditText et;
Button call_btn;
Context context;
private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context=this;
    et=(EditText)findViewById(R.id.editText1);
    call_btn=(Button)findViewById(R.id.button1);
    call_btn.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                try {
                    // TODO Auto-generated method stub
                    Intent i = new Intent(Intent.ACTION_CALL);
                    i.setData(Uri.parse("tel:" + et.getText().toString()));
                    startActivity(i);
                }
                catch (SecurityException e){
                    Writer writer = new StringWriter();
                    e.printStackTrace(new PrintWriter(writer));
                    String s = writer.toString();
                    Toast.makeText(getBaseContext(), s, Toast.LENGTH_SHORT).show();
                }
            }else {
                getPermission();
            }
        }
    });
}
public void getPermission(){
    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
    } else {

    }
}

}

下面是我的manifest.xml文件中的内容

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="flashcodesolution.recharger">
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <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>

</manifest>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-02 12:28:56

您需要覆盖onRequestPermissionsResult方法并再次进行调用,如下所示:

代码语言:javascript
复制
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Intent i = new Intent(Intent.ACTION_CALL);
            i.setData(Uri.parse("tel:" + et.getText().toString()));
            startActivity(i);
        }
    }
}

无论如何,如果你只是想打开内置的手机应用程序,你可以将操作更改为Intent.ACTION_DIAL,这不需要任何权限。

代码语言:javascript
复制
Intent i = new Intent(Intent.ACTION_DIAL);

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54000430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档