当前位置: 首页 > 知识库问答 >
问题:

从recyclerview调用新的Intent Intent_ActionCall

郝乐心
2023-03-14

我有一个回收视图,并希望调用一个在edittext holder.textPhone中编写的电话号码。Action_Call,app一直停。我的代码中有什么错误?

这是我的userAdapter类,它包含回收器视图。

 package com.example.mher.citygo;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

public class UserAdapter extends 
RecyclerView.Adapter<UserAdapter.UserViewHolder> {

private List<UserModel> list;

public UserAdapter(List<UserModel> list) {
    this.list = list;
}

@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new UserViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false));
}

@Override
public void onBindViewHolder(final UserViewHolder holder, int position) {

    UserModel user = list.get(position);
    holder.textFrom.setText(user.from);
    holder.textTo.setText(user.to);
    holder.textDate.setText(user.date);
    holder.textPhone.setText(user.phone);
    holder.textPhone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = v.getContext();
            Intent intent = new Intent(Intent.ACTION_CALL);
            if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                context.startActivity(intent);
                return;
            }


        }
    });


}

@Override
public int getItemCount() {
    return list.size();
}

class UserViewHolder extends RecyclerView.ViewHolder
{
    TextView textFrom,textTo,textDate,textPhone;

    public UserViewHolder(View itemView) {
        super(itemView);
        textFrom=(TextView) itemView.findViewById(R.id.text_from);
        textTo=(TextView) itemView.findViewById(R.id.text_to);
        textDate=(TextView) itemView.findViewById(R.id.text_date);
        textPhone=(TextView) itemView.findViewById(R.id.phonenumber);
    }
}
}

LOGCAT

  07-19 15:17:08.500 30009-30009/com.example.mher.citygo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.example.mher.citygo, PID: 30009
                                                                         java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxx.xxxxxxx.xx.xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xx..x..x...x....xxxxxxx-xxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{b536158 30009:com.example.mher.citygo/u0a74} (pid=30009, uid=10074) with revoked permission android.permission.CALL_PHONE
                                                                             at android.os.Parcel.readException(Parcel.java:1684)
                                                                             at android.os.Parcel.readException(Parcel.java:1637)
                                                                             at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3101)
                                                                             at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
                                                                             at android.app.Activity.startActivityForResult(Activity.java:4225)
                                                                             at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
                                                                             at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
                                                                             at android.app.Activity.startActivityForResult(Activity.java:4183)
                                                                             at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
                                                                             at android.app.Activity.startActivity(Activity.java:4522)
                                                                             at android.app.Activity.startActivity(Activity.java:4490)
                                                                             at com.example.mher.citygo.UserAdapter$1.onClick(UserAdapter.java:45)
                                                                             at android.view.View.performClick(View.java:5637)
                                                                             at android.view.View$PerformClick.run(View.java:22429)
                                                                             at android.os.Handler.handleCallback(Handler.java:751)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:154)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

共有3个答案

袁鸿畅
2023-03-14

看看这个

 Intent callIntent = new Intent(Intent.ACTION_CALL); //use ACTION_CALL class
 callIntent.setData(Uri.parse("tel:" + user.phone));    //this is the phone number calling
      //check permission
      //If the device is running Android 6.0 (API level 23) and the app's targetSdkVersion is 23 or higher,
      //the system asks the user to grant approval.
 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
          //request permission from user if the app hasn't got the required permission
          ActivityCompat.requestPermissions(this,
                  new String[]{Manifest.permission.CALL_PHONE},   //request specific permission from user
                  10);
          return;
 }else {     //have got permission
          try{
              startActivity(callIntent);  //call activity and make phone call
          }
          catch (android.content.ActivityNotFoundException ex){
              Toast.makeText(getApplicationContext(),"yourActivity is not founded",Toast.LENGTH_SHORT).show();
          }
 }   
许鸿志
2023-03-14

v.getContext() 上调用 startActivity() 似乎导致了这里的错误。尝试在调用 startActivity() 之前将以下标志添加到您的意图中:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
程吕恭
2023-03-14

您在错误的位置添加了< code>startActivity,请在条件改变后添加此行

holder.textPhone.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Context context = v.getContext();
        Intent intent = new Intent(Intent.ACTION_CALL,  Uri.parse("tel:" + "1324567890"));
        if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
           Toast.makeText(this, "permission not granted", Toast.LENGTH_SHORT).show();
            ActivityCompat.requestPermissions(this,
              new String[]{Manifest.permission.CALL_PHONE},143);
        }else{
          context.startActivity(intent);
           }


    }
});
 类似资料:
  • 我已经研究了这个问题的几个SO答案(这里、这里和这里),但没有一个提议的解决方案奏效。我的问题是我的RecyclView列表项没有显示。我在MessengerRecyclAdapter、onCreateViewHolder、onBindViewHolder和getItemCount中设置了断点,并且只调用了第一个。在断点中,我输入了表达式评估器并执行 并得到了预期的答案20。RecyclerVie

  • 我的不调用、甚至构造函数,因此中不显示任何内容。我放了日志进行调试,但没有显示日志。可能是什么问题? 我的适配器: 我的自定义行XML: 而我的片段:

  • 没有任何错误,所有数据似乎都有效。出于某种原因,正在调用与视图相关的其他方法。我已经确保了以下几点: > > 正在调用构造函数,成员变量有效。 父视图是垂直线性布局;没有scrollview,或任何其他具有自己滚动属性的视图。 包含片段的视图被创建并显示在屏幕上。 下面是片段中的声明,后跟适配器。任何帮助都将不胜感激,因为这完全令人困惑。

  • 当我的设备联机时,RecyclerView适配器会按预期工作。脱机时,不会调用onCreateViewHolder。 首先,我知道这一点:Recyclerview不会调用CreateViewHolder,这不是问题所在。getItemCount()返回一个数字 所以,它似乎与在线/离线状态有关,但我无法弄清楚如何。这是适配器:

  • 我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong

  • 我想单击按钮将添加到中,但未调用适配器的实现方法。 这是我的代码: CourseDetailAdapter。班 我想为输入数据添加layout,所以我不确定是否正确