2017-12-11 13 views
1

私は自分のアクティビティをコールスクリーンの内側に設定したいと思います。私はアンドロイド6.0以上で動作するようにしながら、これの多くの例がアンドロイドの古いバージョンでは見てきました。これは、私がパーミッションに対処しなければならないことを意味します。私は必要な許可を与えることができました。その後、BroadcastReceiverを継承するクラスを作成して、電話が鳴っているときに検出できるようにします。唯一の問題は、コール表示の前に自分のアクティビティを送信できないことです。これらは、私が使用しているクラスの一部です:カスタムコールアクティビティの設定

public class PhoneStateReceiver extends BroadcastReceiver { 

    public void onReceive(Context context, Intent intent) { 
     try { 
      System.out.println("Receiver start"); 
      String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
      Toast.makeText(context, " Receiver start ", Toast.LENGTH_SHORT).show(); 

      if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
       Toast.makeText(context, "Ringing State Number is -", Toast.LENGTH_SHORT).show(); 
       Intent dialogIntent = new Intent(context, LockActivity.class); 
       dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
       context.startActivity(dialogIntent); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public class LockActivity extends AppCompatActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_lock_screen); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
       + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
       +WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
       +WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
     Button btnLock = (Button) findViewById(R.id.btnUnlock); 
     final EditText txtPass = (EditText) findViewById(R.id.txtPass); 
     btnLock.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String pass = txtPass.getText().toString(); 
       if(pass.equals("pass")||pass.equals("пасс")) { 
        finish(); 
       }else{ 
        Toast.makeText(LockActivity.this, "Wrong password!", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

    } 
} 

他に必要なものがあればお尋ねください!

+0

多分[カスタムAndroidのテレフォニーアプリケーション](https://stackoverflow.com/questions/20600377/custom-android-telephony-application)の作成上のこの古い投稿が便利ですか! – 0X0nosugar

+0

いいえ、リンクはもはや利用可能でないリンクで古い質問につながっています –

+0

それは残念です、リンクのコレクションは有望に見えました。私は少なくともあなたの権利を得て、あなたは "電話アプリ"を書いてみたいですか? – 0X0nosugar

答えて

1

私はそれを解決することができました。問題は、内蔵のコールアクティビティを開始するには時間がかかるため、私のアクティビティが最初に開始し、もう1つがその上に乗ったということです。したがって、私は自分のアクティビティの現在のスレッドを1秒未満でスリープ状態にしました。ビルドされたアクティビティが開始され、その後、私のアクティビティがその上に移動しました。

public class PhoneStateReceiver extends BroadcastReceiver { 

     public void onReceive(Context context, Intent intent) { 
      try { 
       System.out.println("Receiver start"); 
       String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
       Toast.makeText(context, " Receiver start ", Toast.LENGTH_SHORT).show(); 

       if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
        Toast.makeText(context, "Ringing State Number is -", Toast.LENGTH_SHORT).show(); 
        Intent dialogIntent = new Intent(context, LockActivity.class); 
        dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
        Thread.sleep(700); 
        context.startActivity(dialogIntent); 
       } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
関連する問題