Facebook의 "Messenger"에는 재부팅 후 가장 높은 우선 순위를 갖는 SMS 브로드 캐스트 수신기가 있습니다.
페이스 북의 메신저의 우선 순위가 2147483647
자신을 위해, android.provider.Telephony.SMS_RECEIVED
방송 수신기, 자신의 매니페스트에 선언했다.
(다른 앱이 자체 규칙을 만들기 때문에 문서의 최대 우선 순위가 1000 인 문서의 표준을 따르지 않는 것이 안타깝습니다.)
내 우선 순위가 엄청나게 높은 수준으로 설정되어 있다면 내 2147483647
앱을 먼저 설치해야 "관계"보다 우선 할 수 있음을 이해합니다. 문제 없습니다. 내 앱이 제대로 작동하려면 제거해야 할 앱이 무엇인지 사용자에게 알리는 화면을 만들었습니다.
그러나 여기에 문제가 있습니다. 모든 것이 잘 작동하지만 전화가 재부팅 되 자마자 "메신저"가 내 앱보다 우선권을 갖기 시작합니다. 나는 그들이이 흑 마법을 어떻게 할 수 있는지보기 위해 곳곳을 샅샅이 살펴 보았다 그들은 이것을 어떻게합니까? 재부팅 후 앱을 처음 설치할 때 우선 순위를 어떻게 얻습니까?
지금까지 떠오른 유일한 것은 브로드 캐스트 수신기를 등록 할 때 부팅시 패키지 이름이 알파벳순으로 정렬된다는 것입니다.
com. f acebook> com. s trikeforcezero
방송 수신기를 등록하려고 android.intent.action.BOOT_COMPLETED
했지만 작동하지 않을 것 같습니다.
메신저에는 또 다른 "낮은 우선 순위 브로드 캐스트 수신기" android.provider.Telephony.SMS_RECEIVED
가 있습니다.-1
확실히 :
사용자가 facebook보다 먼저 앱을 다운로드하면 수신자가 우선 순위가 2147483647이지만 수신자가 우선권을 갖습니다. 재부팅 후에는 둘 다 동일한 우선 순위를 갖고 사용자가 이전에 설치되었지만 Facebook의 수신자가 우선권을 갖습니다. 따라서 확실히 트릭은 BootReceiver에 있습니다.
추측 :
- 첫 번째 단계로 우선 순위가 동일한 2147483647 (우선 순위는 영향을 미치지 않고 추가 만하면 됨)의 부팅 수신기를 앱에 추가합니다. 페이스 북 앱보다 먼저 앱을 설치하고 전화를 다시 시작하세요. 이 경우 프로세스가 facebook보다 먼저 시작되고 SMS 수신기가 facebook보다 먼저 시작된다는 사실과 관련이있을 수 있습니다.
- 동일한 작업을 수행하되 facebook보다 알파벳순으로 우선 순위를 갖도록 패키지 이름을 aaa로 변경하십시오.
Boot Receiver에서 다음 코드를 추가해보십시오.
ComponentName component; component=new ComponentName(this, SmsReceiver.class); getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); component = new ComponentName(this, SmsReceiver.class); getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
부트 리시버가 페이스 북의 부트 리시버보다 우선하는지 확인하는 것이 유용 할 수 있습니다. 그것이 가능한지 잘 모르겠습니다.
마지막으로 매니페스트에서 구별 할 수있는 프로세스가 있지만 어쨌든 유용 할 수 있는지 확실하지 않습니다.
최대 우선 순위 값이 1000이더라도 Facebook은 가장 큰 정수 값을 우선 순위로 사용했습니다. 따라서 기회를 원한다면 동일하게 유지해야합니다 (2147483647). 앱이 설치된 후 사용자에게 Facebook을 제거하고 설치하도록 알립니다.
재부팅 후 우선 순위를 얻으려면 boot_completed에 대한 우선 순위를 설정할 수 없으므로 Android 소스 코드, 특히 SystemServer.java를 탐색하고 SystemServer가 실행되고 실행되면 부팅이 완료되면 앱을 시작하는 데 사용되는 순서를 확인하십시오. boot_completed에 등록되었습니다.
내 의심은 먼저 설치된 앱이 아니라 먼저 실행되는 앱에 의해 연결이 끊어지는 것입니다. 응용 프로그램을 수동으로 설치하고 제거하는 경우 실행 순서를 수동으로 제어합니다. 그런 다음 재부팅하면 실행 순서가 Android의 시작 동작에 양도됩니다. 이것이 알파벳순으로 발생하는지 테스트하는 것은 쉽습니다. 빠른 테스트 앱 이름 aaa를 빌드하고 재부팅 후 우선 순위를 유지하는지 확인하십시오. 부팅 순서가 알파벳순으로 변경되지 않으면 주석을 달고 시작 순서를 설정하는 방법을 알아볼 것입니다.
이것은 안드로이드 메커니즘에 버그가 있음을 보여줍니다. 그들이 매니페스트에 넣는 숫자가 실제로 숫자가 아니기 때문입니다. 2147483647은 2 ^ 31 인 (-1)입니다. 어떤 응용 프로그램을 먼저 설치하는 것이 중요하다고 생각하십니까?
'program tip' 카테고리의 다른 글
Visual Studio 내에서 LARGEADDRESSAWARE를 설정할 수 있습니까? (0) | 2020.11.23 |
---|---|
내 Android 장치에 특정 패키지가 있는지 어떻게 알 수 있습니까? (0) | 2020.11.23 |
네이티브 IOS 앱 및 node.js (0) | 2020.11.22 |
XML Drawable-Android를 통해 원을 어떻게 그릴 수 있습니까? (0) | 2020.11.22 |
MySQL, PostgreSQL 및 SQLite의 데이터베이스 열 유형 비교? (0) | 2020.11.22 |