[英]BroadCast Receiver not launching activity
我正在實現一個隱藏的應用程序。 我想隱藏手機中的應用程序並在我撥打某個號碼時啟動它。
首先,我在清單上聲明了一個別名活動,並將其隱藏。 它是 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>
使用此代碼,我可以隱藏圖標。
我也有一個廣播接收器。 這個:
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();
}
}
}
問題是,當我撥打“12345”時,Toast 出現了,但 MainActivity 沒有。 我已經嘗試向意圖添加標志並開始通過包查找它的意圖。 但意圖似乎不起作用。 日志“receeeeeeeeiving”也出現了。
嘗試這個
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();
}
嘗試這個:
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);
最初安裝應用程序時,它處於“已停止”狀態。 它保持在停止狀態,直到用戶明確啟動其活動之一。 如果用戶強行關閉應用程序,則它將返回到停止狀態。
當應用程序處於停止狀態時,將不會調用任何廣播接收器。 我懷疑根本無法調用BroadcastReceiver
的唯一原因是因為您在開發過程中的某個時候啟動了主要活動。 現在,被禁用,它將無法運行。 如果您要將此應用安裝在全新的設備上(或強行關閉該應用以將其重置為停止狀態),您將什至看不到日志和吐司。
對此有多種解決方案:
對於那些在 MIUI OS 手機(小米)上遇到相同問題的人,您有多種解決方法:
這些都是非root解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.