3

ユーザーがブラックリストに番号を追加できるようにするアンドロイドに取り組んでいます。着信番号がブラックリストの番号と一致する場合、電話が短時間鳴ってから通話を切断したとしても、通話を拒否する必要があります。

SO を含め、私が見つけたものはすべて、作成した com.android.internal.telephony で AIDL を作成しないと実行できないと言っていますが、電話状態の変更許可を追加する必要があると言われているため、追加できませんシステムアプリ。

私は ICS を上向きにターゲットにしていますが、他のアプリが ICS 以降で通話をブロックしているのを見たので、これはどのように行われますか。また、マニフェスト ファイルに電話状態の変更権限を追加しようとしましたが、システム アプリでのみ使用できるというエラーが表示されるため、この問題を回避するにはどうすればよいですか。アプリをルート化する必要はありません。

あなたが提供できる助けをありがとう

4

1 に答える 1

4

少しの運で答えを見つけました。

権限を追加する代わりに権限をMODIFY_PHONE_STATE追加CALL_PHONE

という名前の新しいパッケージを作成します。com.android.internal.telephony

このパッケージ内に というファイルを作成しITelephony.aidl、次の内容を追加します。

パッケージ com.android.internal.telephony;

interface ITelephony {      

    boolean endCall();     

    void answerRingingCall();      

    void silenceRinger(); 

}

通話をブロックするには、次のコードを使用します

try
        {
            TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            Class c = Class.forName(tm.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);

            com.android.internal.telephony.ITelephony  telephonyService = (ITelephony)m.invoke(tm);
            //telephonyService.silenceRinger();
            telephonyService.endCall();
        }
        catch (Exception e)
        {
            Log.d("BLOCK CALL", e.toString());
            Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
        }

これが他の人に役立つことを願っています。見つけるのは簡単ではありません。ただし、Google がこのようなことをいじらずにこれを行う機能を削除した理由はわかりません。

于 2013-02-06T22:59:33.850 に答える