开发者社区 问答 正文

我正在使用android中的动作调用

我已经完成了放置呼叫的代码,而事情是我想从存储在数据库中的号码发出呼叫,这意味着我想在我的应用程序中进行动态呼叫操作……Ho,我做到了……。任何帮助将不胜感激......谢谢!

我放置呼叫的代码...就在下面...

cardView1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:9855956530"));
        startActivity(callIntent);
        if (Build.VERSION.SDK_INT >= 23) {
            if (getActivity().checkSelfPermission(android.Manifest.permission.CALL_PHONE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.v("TAG","Permission is granted");

            } else {

                Log.v("TAG","Permission is revoked");
                ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CALL_PHONE}, 1);

            }
        }
        else { //permission is automatically granted on sdk<23 upon installation
            Log.v("TAG","Permission is granted");

        }
    }

});

我在这个应用程序中使用了片段数据库是Sqlite数据库

展开
收起
垚tutu 2019-11-29 23:11:02 603 分享 版权
阿里云 AI 助理回答

要在您的应用程序中实现从数据库中动态获取号码并发起呼叫的功能,您需要首先从SQLite数据库中读取电话号码,然后将这个动态获取的号码传递给您的呼叫意图(Intent)。以下是一个简化的步骤说明和示例代码,展示如何结合使用SQLite数据库操作与呼叫功能:

1. 创建或访问SQLite数据库

确保您已经设置好了一个SQLiteOpenHelper类来管理数据库的创建和版本控制,并定义了方法来查询电话号码。

public class DatabaseHelper extends SQLiteOpenHelper {
    // 数据库版本号,可以自定义
    private static final int DATABASE_VERSION = 1;

    // 数据库名称
    private static final String DATABASE_NAME = "phone_numbers_db";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 在这里执行创建表的SQL语句
        String CREATE_TABLE_PHONE_NUMBERS = "CREATE TABLE phone_numbers (id INTEGER PRIMARY KEY, number TEXT)";
        db.execSQL(CREATE_TABLE_PHONE_NUMBERS);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 更新表结构时的操作
    }

    // 查询电话号码的方法
    public String getPhoneNumber() {
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT number FROM phone_numbers LIMIT 1"; // 假设只取第一条记录
        Cursor cursor = db.rawQuery(query, null);

        String phoneNumber = "";
        if (cursor.moveToFirst()) {
            phoneNumber = cursor.getString(0);
        }
        cursor.close();
        return phoneNumber;
    }
}

2. 动态发起呼叫

在您的片段(Fragment)或其他活动(Activity)中,使用上述DatabaseHelper类获取电话号码,并用它来构建呼叫意图。

// 假设dbHelper是已经初始化好的DatabaseHelper实例
cardView1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String phoneNumber = dbHelper.getPhoneNumber(); // 从数据库获取电话号码
        if (!phoneNumber.isEmpty()) {
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:" + phoneNumber));

            if (Build.VERSION.SDK_INT >= 23) {
                if (getActivity().checkSelfPermission(Manifest.permission.CALL_PHONE)
                        == PackageManager.PERMISSION_GRANTED) {
                    Log.v("TAG", "Permission is granted");
                    getActivity().startActivity(callIntent);
                } else {
                    Log.v("TAG", "Permission is revoked");
                    ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CALL_PHONE}, 1);
                }
            } else {
                getActivity().startActivity(callIntent); // SDK < 23,权限自动授予
            }
        } else {
            Toast.makeText(getActivity(), "No phone number found in the database.", Toast.LENGTH_SHORT).show();
        }
    }
});

请确保您的应用已经正确地请求了CALL_PHONE权限,并且用户已经授予了该权限。如果用户尚未授权,您应该处理权限请求的结果,并在获得权限后才尝试发起呼叫。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答标签:
问答地址: