1

このアプリがインストールされていることを第三者に知られないように、アプリケーションのリストから自分のアプリを非表示にしたいと考えています。

これは次の方法で実現できることがわかりました: アプリケーションをアプリケーション ランチャーから隠したい場合はandroid.intent.category.LAUNCHER、どのアクティビティにも含めないでください。

私はこれを試してみましたが、動作しています。ここで、アプリを起動するためのショートカットを定義する必要があります。

発信用のブロードキャストレシーバーでこれを達成しようとしています。SO 私は、onreceiveダイヤルされた番号 = 私のパターンであるかどうかを確認してから、アクティビティを開始します

ここでいくつか質問があります

  1. これは正しいやり方ですか

  2. 以下のレシーバーのコードを参照してください。ここで私のレシーバーが呼び出されますが、そのシステムアプリとともに、「番号ダイヤル」を処理するアプリも呼び出されます。そのため、パターンをダイヤルしても、アクティビティを表示した後、電話をかけます。ダイヤルした番号が自分のパターンに一致する場合は、発信を停止したい。どうすればこれを達成できますか

  3. 新しいタスクとして活動を開始しています。アプリを初めて実行すると、アクティビティ画面が表示されます。しかし、もう一度ダイヤルすると、前面に表示されません。どうすればこれを達成できますか。前の質問を解決すれば、これはうまくいくと思います。

    public class OutgoingCallInterceptor extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
    
            final String originalNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    
            this.setResultData("0123456789");
    
            final String newNumber = this.getResultData();
    
            String msg = "Intercepted outgoing call. Old number " + originalNumber + ", new number " + newNumber;
    
            Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
            Intent intent1 = new Intent(context,ShowMessageActivity.class);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);
        }
    }
    

メニフェストファイル

<application android:icon="@drawable/icon" android:label="Outgoing Call Interceptor">

    <receiver android:name="OutgoingCallInterceptor">
        <intent-filter android:priority="1">
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
        </intent-filter>
    </receiver>
    <activity android:name="ShowMessageActivity" ></activity>

</application>

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
4

3 に答える 3

0

しかし、アプリのリストで、インストールされているすべてのアプリを言うつもりなら、それは不可能だと思います

<action android:name="android.intent.action.CREATE_SHORTCUT" />

ショートカットを作成する

そして、この方法でアプリを非表示にする方法を見つけられなかったため、残りの要件を達成することはできません。また、携帯電話は個人用デバイスであるため、ブロードキャストレシーバーを使用して、ダイヤラーの意図がいつ起動されるかを知ることができます。一緒に別のアプリとして入力されたキー。

于 2012-04-30T12:11:53.433 に答える
0
public class OpenApplication extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    String compare_num = "777";
    if (number.equals(compare_num)) {
        Intent myintent = new Intent(context, MainActivity.class);
        myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myintent);
    //  abortBroadcast();
        setResultData(null);
    }
}

}

   <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

   <!-- OPEN APP -->
    <receiver android:name="receiver.OpenApplication" >
        <intent-filter android:priority="0" >
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
    </receiver>
于 2014-06-27T05:34:04.837 に答える
0
  1. それは正しいことではありませんが、おそらくそれを行う唯一の方法です:)
  2. レシーバーで this.abortBroadcast() を呼び出して、呼び出しを中止することができます。残念ながら今は確認できませんが、動作するはずです。
于 2012-08-03T06:26:29.973 に答える