2017-01-23 22 views
0

TL; DR Activity.startLockTask()を使用して電話をかけるにはどうすればいいですか?Android Locktaskモードで通話を実行

私はAndroid搭載端末に制限された環境、つまり通常は「キオスクモード」を設定しようとしています。

公式ドキュメントはここで見つけることができます: https://developer.android.com/work/cosu.html

これを行う公式の方法はActivity.startLockTaskを使用することをお勧めします。

startLockTask()モードのActivity内から他のアプリを起動するまでは問題ありません。 起動するアクティビティは、新しいタスクスタックで開始してはいけません。さもなければ、システムは起動の意図をブロックします。つまり、Intent.FLAG_ACTIVITY_NEW_TASKはありません。

いくつかのアプリはただ起動することができますが、他のアプリは暗黙的にこのフラグを設定しているようですが、startActivityForResult(...)を使用することで回避策をとることができます(NEW_TASKフラグを削除するようです)。それでもまだ動作しないアプリについては、私自身のコードをコード化することができます。

実際の問題は、新しいタスクスタックを強制するコールアプリケーションです。通話を開始すると通話が開始されますが、ステータスバーには通話通知が表示されます(startLockTask()を使用中はアクセスできない) 他のアプリとは対照的に、通話アプリは、トン

DevicePolicyManager.html.setLockTaskPackages()は、この動作には影響を与えません...カスタムアプリケーションに置き換えること。

答えて

0

あなたは、私がロックされたモードで開始コールの意図を作ってみました、これ?

setLockTaskPackages(new ComponentName(this, DeviceAdminReceiver.class),new String[]{getPackageName(),"com.google.android.dialer"}); 
+0

違いはありません。問題は、コールアプリ/アクティビティが新しいタスクスタックを強制することです。これはまさにロックモードが防止するものであり、コールUIを隠すことになります。 – darken

1

これを試してみましたラインポップアップ:

system_process E/ActivityManager: Attempted Lock Task Mode violation mStartActivity=ActivityRecord{56ab302 u0 com.android.server.telecom/.components.UserCallActivity t155} 

だから私は、ダイヤラを出すためにマネージド

setLockTaskPackages(<ComponentName>,new String[]{getPackageName(),"com.google.android.dialer","com.android.server.telecom"}); 

を追加します。もちろん、ホームボタンまたは戻るボタンを押しても、ダイヤラーを戻す方法はありません...最近のボタンはまだロックされています。着信コールは完全に動作します(すべてのボタンは無効です)

+0

ダイヤラから電話をかけるとどうなりますか? – darken

+0

申し訳ありませんが、私のコールインテントが電話番号を直接提供しました。 – hadifikri

+0

同じことについて話し合う必要があります。コールアクティビティとダイヤラアクティビティがあります。コールアクティビティは、デイラーから「コール」を押すと開始されるアクティビティです。 – darken

関連する問題