通过拨打号码启动活动

src*_*091 9 android broadcastreceiver

我已经创建了一个合适的BoradcastReceiver,注册它Manifest.xml,这是我的问题:如果我的应用程序已经启动并挂在后台,那么拨打一个数字会把它带到前面.如果尚未启动,则拨打号码将无效.
我怎样才能解决这个问题?如果这很重要的话,我会在小米Mi4上用MIUI6进行测试.

这是代码(我使用Scala):

manifest.xml文件:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
...
<receiver android:name="DialerGate" android:enabled="true" android:exported="true">
            <intent-filter android:priority="1">
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

广播接收器:

class DialerGate extends BroadcastReceiver {
  def onReceive(context: Context, intent: Intent) =
    if (intent.getAction equals Intent.ACTION_NEW_OUTGOING_CALL) {
      val phoneno = intent.getExtras getString Intent.EXTRA_PHONE_NUMBER
      val prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE)
      val number = prefs.getString(AbstractKit.LAUNCH_NUMBER, null)

      Log.d("WALLET-PHONE", s"Dialed number: $phoneno, saved number: $number")
      Log.d("WALLET-PHONE-OK", (number == phoneno).toString)

      val i = new Intent
      i.setClassName("com.app.wallet", "com.app.wallet.MainActivity")
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)

      val appContext = context.getApplicationContext
      appContext.startActivity(i)


      //if (number == phoneno) context startActivity new Intent(context, target)
      //context stopService intent
    }
}
Run Code Online (Sandbox Code Playgroud)

Bon*_*tti 5

从简单的用户角度来看,这是无法完成的(它是一个安全功能).

从HONEYCOMB开始Android在应用程序至少运行一次之前不允许调用任何广播接收器.

它基本上更简单,允许程序至少运行一次(在引导期间是最常见的程序),然后如果不是时候使用它,则意图关闭应用程序.

检查这一点以获取有关如何实现可能执行您需要的其他接收器的更多详细信息.