BroadCast Receiver未启动活动

时间:2018-03-07 13:10:09

标签: android broadcastreceiver hidden

我正在实施一个隐藏的应用程序。我想隐藏手机中的应用程序,并在我拨打某个号码时启动它。

首先,我在清单上声明了一个别名活动,然后隐藏它。它是MainActivity2:

public class Main2Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    PackageManager p = getPackageManager();
    ComponentName LAUNCHER_COMPONENT_NAME = new ComponentName(
            "com.example.susan.oculta.launcher", "com.example.susan.oculta.launcher.Launcher");
    p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);...

一些清单行:

<activity-alias
        android:name=".launcher.Launcher"
        android:targetActivity=".launcher.Main2Activity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

使用此代码,我可以隐藏图标。

我还有一个BroadCast接收器。这一个:

public class LaunchAppViaDialReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    if (null == bundle)
        return;
    String phoneNubmer = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    //here change the number to your desired number
    if (phoneNubmer.equals("12345")) {
        Log.i("reciving", "receeeeeeeeeiving");

        Intent i = new Intent();
        i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.setClass(context, MainActivity.class);
        context.startActivity(i);

        setResultData(null);
        Toast.makeText(context, "aaaa", Toast.LENGTH_LONG).show();

    }
}

}

问题在于,当我拨打&#34; 12345&#34; Toast出现,但MainActivity没有出现。我已经尝试向intent添加标志并开始通过包找到它的意图。但意图似乎不起作用。 日志&#34; receeeeeeeeeiving&#34;也出现了。

3 个答案:

答案 0 :(得分:0)

试试这个

if (phoneNubmer.equals("12345")) {

     Log.i("reciving", "receeeeeeeeeiving"); 
     Intent i = new Intent(context, MainActivity.class);
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
     context.startActivity(i);
     Toast.makeText(context, "aaaa", Toast.LENGTH_LONG).show();
}

答案 1 :(得分:0)

试试这个:

Intent i = new Intent();
String packageName = context.getPackageName();
ComponentName componentName = new 
ComponentName(packageName, packageName + "your_ALIAS_ACTIVITY");
i.setComponent(componentName);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

答案 2 :(得分:0)

最初安装应用时,它处于“已停止”状态。在用户明确启动其中一项活动之前,它仍处于停止状态。如果用户强制关闭应用程序,它将返回到已停止状态。

当应用程序处于停止状态时,将不会调用任何广播接收器。我怀疑您BroadcastReceiver被调用的唯一原因是因为您启动了您在开发过程中的某个时刻的主要活动。现在,被禁用,它将无法运行。如果您要在新设备上安装此应用程序(或强制关闭它以将其重置为已停止状态),您将不再看到您的日志和烤面包。