0

アプリ (またはサービス?) のサポートが必要です。基本的にはふざけていただけで、電話が鳴っていることをアプリが検出した場合にメールを送信できるかどうかを確認することにしました。(ばかげているように思えますが、私にとっては概念実証のようなものです。アプリでカスタムクラスを作成しました(デフォルトのメインアクティビティはありません)実行されるとは思いません..アプリは実行されていますが、1 つも表示されませんでした.だから、クラスをデフォルトのクラスであるかのように実行するために何かをする必要があると考えました.もしそうなら、どうすればそれを行うことができますか? Android マニフェストでは、私が追加したのは、read_phone_state の許可とインターネット (メールを送信する必要がある場合) だけでした。

私の質問は、それを機能させるために何を変更する必要があるかです (デバッグする必要はありません)。マニフェスト ファイルに情報を追加する必要はありますか? アプリの初回起動時に「callservice」クラスを実行する設定を変更する必要はありますか? お願いします、そしてありがとう。

public class MainActivity extends Activity {


    PhoneStateListener listener;
    TelephonyManager tm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(getApplicationContext(), "Service has started", Toast.LENGTH_LONG).show();
        listener = new MyphoneStateListener();
        tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);



    }

    public class MyphoneStateListener extends PhoneStateListener
    {
        public void onCallStateChanged(int state, String incomingNumber)
        {
             switch (state) {  
                case TelephonyManager.CALL_STATE_IDLE:   
                    break;  
                case TelephonyManager.CALL_STATE_RINGING: 
                   sendemail(); 
                    break;  
                case TelephonyManager.CALL_STATE_OFFHOOK:  
                default:  
                    break;  
                }  
                super.onCallStateChanged(state, incomingNumber);  
            }
        }

        private void sendemail()
        {
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("message/rfc822");
            i.putExtra(Intent.EXTRA_EMAIL , new String[]{"random@gmail.com"});
            i.putExtra(Intent.EXTRA_SUBJECT , "phone is ringing");
            i.putExtra(Intent.EXTRA_TEXT , "email successfully sent");
            startActivity(Intent.createChooser(i, "send mail..."));
            Toast.makeText(getApplicationContext(), "Email has been sent", Toast.LENGTH_LONG).show();

                try
                {
                    startActivity(Intent.createChooser(i, "Send Email..."));
                }
                catch(android.content.ActivityNotFoundException ex)
                {

                }
        }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
4

1 に答える 1

0

ドキュメントonCallStateChangedのように、最初int stateと2番目 に2つのパラメーターを取りString incomingNumberますが、現在のコードでは単一のパラメーターを渡すだけで、PhoneStateListenerのonCallStateChangedメソッドをオーバーライドしていないことを意味しますコードを機能するように変更します。

class MyPhoneStateListener extends PhoneStateListener{  

        @Override  
        public void onCallStateChanged(int state, String incomingNumber) {  
            switch (state) {  
            case TelephonyManager.CALL_STATE_IDLE:   
                break;  
            case TelephonyManager.CALL_STATE_RINGING: 
               sendemail(); 
                break;  
            case TelephonyManager.CALL_STATE_OFFHOOK:  
            default:  
                break;  
            }  
            super.onCallStateChanged(state, incomingNumber);  
        }  

    }  
于 2012-12-17T02:23:34.283 に答える