3

当电话状态响起时,我想运行一个活动来显示我自己的屏幕。

我在用着:

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

但是显示活动时通知栏不会隐藏。

4

1 回答 1

0

浏览以下代码片段:

  1. 创建一个 BroadCastReceiver 类以收听具有最高优先级的来电:

    Manifest.xml

    <receiver android:name=".MyPhoneBroadcastReceiver">
        <intent-filter android:priority="99999">
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
    
  2. 然后在类中,方法以意图动作onReceive()打开活动是CustomCallsReceiver"android.intent.action.ANSWER"

    @Override
    public void onReceive(final Context context, Intent intent) {
    
    Bundle extras = intent.getExtras();
    
    if (extras != null) {
    
        String state = extras.getString(TelephonyManager.EXTRA_STATE);          
        final String incomingNumber = extras.getString("incoming_number");
    
        Handler callActionHandler = new Handler();
    
        Runnable runRingingActivity = new Runnable(){
            @Override
            public void run() {
                 //Notice the intent, cos u will add intent filter for your class(CustomCallsReceiver)
                Intent intentPhoneCall = new Intent("android.intent.action.ANSWER");
                intentPhoneCall.putExtra("INCOMING_NUM", incomingNumber);
                intentPhoneCall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intentPhoneCall);
            }
        };
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            //increase the delay amount if problem occur something like -the screen didn't show up- that's the key about this method(the delay).
            callActionHandler.postDelayed(runRingingActivity, 100);    
        }
        if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
            callActionHandler.removeCallbacks(runRingingActivity);
        }
    
    }
    }
    
  3. 将此意图过滤器添加到manifest file您将用作自定义呼叫接收器的类中。

        <activity android:name="CustomCallsReceiver" android:noHistory="true" android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.ANSWER" />
             <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>    
    </activity>
    
  4. CustomeCallsReceiver班级:

    public class CustomCallsReceiver extends Activity {
    
     private String TAG = "CustomCallsReceiver";
     String incomingNumber, caller;
    
     @Override
       public void onCreate(Bundle savedInstanceState) {
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custome_calls_receiver);
    
    TextView number = (TextView) findViewById(R.id.number);
    number.setGravity(Gravity.CENTER);
    
    incomingNumber = getIntent().getExtras().getString("INCOMING_NUM");
    caller = getCallerName(incomingNumber);
    
    if (caller != null) {
        number.setText(caller + "\n" + incomingNumber);  }  
            }
    
  5. 最后当然不要忘记在manifest文件中添加主题而不是标题或通知栏

     <application
          android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    

希望这对你有用...

于 2013-08-20T13:56:49.663 回答