为什么上下文为空?

问题描述 投票:-1回答:1

我正在尝试使用默认的SMS应用程序实现发送SMS的代码,但我得到了空上下文,我不明白为什么。

我已经尝试过getBaseContext(),getContext(),getApplicationContext但没有成功。

我究竟做错了什么?

我正在使用Moto E5 Android 8.1 Go测试此代码。

代码在MainActivity.java中

public void sendSMS(String msg)
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // At least KitKat
    {
        String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(this); //<---Line 107 --- Need to change the build to API 19

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, msg);

        if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would be able to choose
        // any app that support this intent.
        {
            sendIntent.setPackage(defaultSmsPackageName);
        }
        startActivity(sendIntent);
    }
    else // For early versions, do what worked for you before.
    {
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setType("vnd.android-dir/mms-sms");
        smsIntent.putExtra("address", SMSParameters.getTelefono(this));
        smsIntent.putExtra("sms_body",msg);
        startActivity(smsIntent);

    }
}

HomeFragment类的一部分

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
{
    View view = inflater.inflate(R.layout.fragment_home, container, false);

    final Button buttonAusente = view.findViewById(R.id.button_ausente);
    buttonAusente.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View view)
        {
            String message = null;

                //enviarComando AUSENTE

                //Line 70 below
            message = MessageGenerator.getMessageAusente(_password, _id, SMSParameters.getSecuencia(getContext())); //<-- Line 70
            new MainActivity().sendSMS(message);

        }
    });

    final Button buttonDesactivar = view.findViewById(R.id.button_desactivar);
    buttonDesactivar.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view)
        {
            String message = null;
           //enviarComando DESACTIVAR
            message = MessageGenerator.getMessageDesactivar(_password, _id, SMSParameters.getSecuencia(getContext()));
            new MainActivity().sendSMS(message);

        }
    });

    final Button buttonPresente = view.findViewById(R.id.button_presente);
    buttonPresente.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view)
        {
            String message = null;

               // enviarComando PRESENTE
            message = MessageGenerator.getMessagePresente(_password, _id, SMSParameters.getSecuencia(getContext()));
            new MainActivity().sendSMS(message);
        }
    });

    final Button buttonPanico = view.findViewById(R.id.button_panico);
    buttonPanico.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view)
        {
            String message = null;

            //  enviarComando(Comandos.PANICO);
            message = MessageGenerator.getMessagePanico(_password, _id, SMSParameters.getSecuencia(getContext()));
            new MainActivity().sendSMS(message);

        }
    });

    setStatusIcon(getContext(), Comandos.AUSENTE, view);
    setStatusIcon(getContext(), Comandos.DESACTIVAR, view);
    setStatusIcon(getContext(), Comandos.PRESENTE, view);
    setStatusIcon(getContext(), Comandos.PANICO, view);

    saveViewStatus(view);

    return view;
}
android android-context
1个回答
1
投票

new MainActivity().sendSMS(message); - 这不行。首先,您不是通过构造函数实例化活动,而是使用Intent,其次,因为您不想创建新活动,而是访问当前附加到片段的活动。

为了与你的片段中的宿主活动进行交流,你可以看到我的答案here (see Methods 2 and 3)this sample project。这些技术也在Android Documentation中列出。

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