[获取imei信息时如何在dialogFragment中获取上下文

问题描述 投票:1回答:3
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.layout_reg_dialog, null);
    TextView tvIMEI = null;

    builder.setView(view)
            .setTitle("Activer la Version");
    registerKey = view.findViewById(R.id.regiter_key);
    tvIMEI = view.findViewById(R.id.tvIMEI);
    String sIMEI;
    sIMEI = getUniqueIMEIId(getContext(this));
    tvIMEI.setText(sIMEI);
    return builder.create();
}

getUniqueIMEIID不是abel this上下文,当我调用getContext(this)时给出错误image from android studio

public static String getUniqueIMEIId(Context context) {
    TelephonyManager telephonyManager = (TelephonyManager) 
     context.getSystemService(Context.TELEPHONY_SERVICE);
     ...
     String imei = telephonyManager.getDeviceId();
    ...
}
java android android-studio android-layout contextmenu
3个回答
1
投票

如果使用dialogFragment创建对话框,并且getUniqueIMEIId像这样:

public static String getUniqueIMEIId(Context context) {
    try {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {          
            return "";
        }
        String imei = telephonyManager.getDeviceId();
        Log.e("imei", "=" + imei);
        if (imei != null && !imei.isEmpty()) {
            return imei;
        } else {
            return android.os.Build.SERIAL;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "not_found";
}

getContext()是。

返回此片段当前与之关联的上下文但是getUniqueIMEIId方法需要上下文

getActivity()

返回此片段当前与之相关的FragmentActivity。如果该片段与上下文相关联,则可能返回null。

在主要情况下,它们是相同的。而且我们只需要context。所以我建议您使用getContext()


0
投票

究竟是什么错误?是否表明希望使用上下文但已通过对话框?

如果是,您可以只使用上面使用的getActivity()方法来访问上下文。

所以打电话

sIMEI = getUniqueIMEIId(getActivity());

0
投票

getContext(this)替换getActivity().getApplicationContext(),它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.