本文主要是介绍[SDM450][Android9.0] 禁止第一次使用谷歌拼音输入法弹出申请使用联系人弹框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
国内的固件需要内置谷歌拼音输入法,而刷完机后第一次使用谷歌拼音,都会弹出一个弹框申请使用联系人权限,即使默认给了运行时权限也还会弹出这个弹框。
解决方案
在Dialog.java中根据包名,将谷歌输入法的弹框禁止掉即可。
--- a/frameworks/base/core/java/android/app/Dialog.java
+++ b/frameworks/base/core/java/android/app/Dialog.java
@@ -58,6 +58,7 @@ import android.view.Window;import android.view.WindowManager;import android.view.accessibility.AccessibilityEvent;+import android.widget.TextView;import com.android.internal.R;import com.android.internal.app.WindowDecorActionBar;import com.android.internal.policy.PhoneWindow;
@@ -309,7 +310,15 @@ public class Dialog implements DialogInterface, Window.Callback,onStart();mDecor = mWindow.getDecorView();
-
+ //新增start
+ String packageName = mContext.getApplicationContext().getPackageName();
+ if("com.google.android.inputmethod.pinyin".equals(packageName)){
+ int id = mContext.getResources().getIdentifier("com.google.android.inputmethod.pinyin:id/body", "id", null);
+ TextView textView= (TextView)mDecor.findViewById(id);
+ if(textView!=null){
+ String HINTTEXT= "为了方便您输入联系人姓名,谷歌拼音输入法将会访问您的联系人列表以获取姓名。另外,开启词典更新功能将需要用到网络连接。我们保证这些权限的使用是透明和安全
的,不会将其用于未告知您的地方。";
+ Log.d("HINTTEXT",textView.getText().toString());
+ if(HINTTEXT.equals(textView.getText().toString()))return;
+ }
+ }
+ //新增end
功能扩展
在某些使用场景中,要求系统尽可能地禁止被退出客户应用,保证客户的应用一直处于前台;而谷歌拼音输入法有个切换皮肤功能,可以跳转到系统设置,从而有了退出客户应用的途径;于是客户要求禁止跳转到输入法皮肤设置界面;解决方案原理与上面的方式类似,在Activity跳转到时候,根据包名禁止应用跳转。
--- a/frameworks/base/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/frameworks/base/services/core/java/com/android/server/am/ActivityStarter.java
@@ -16,6 +16,7 @@package com.android.server.am;import static android.app.Activity.RESULT_CANCELED;import static android.app.ActivityManager.START_ABORTED;import static android.app.ActivityManager.START_CANCELED;
@@ -1024,6 +1025,15 @@ class ActivityStarter {// Collect information about the target of the Intent.ActivityInfo aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, profilerInfo);+ Slog.w(TAG, "======================== callingPackage:" + callingPackage + "&& intent.getComponent().getClassName():" + intent.getComponent().getClassName());
+ if(("com.google.android.inputmethod.pinyin".equals(callingPackage) && "com.google.android.apps.inputmethod.pinyin.preference.SettingsActivity".equals(intent.getComponent().getClassName())) || "com.google.android.inputmethod.pinyin".equals(callingPackage) && "com.google.android.apps.inputmethod.libs.theme.preference.ThemeSelectorActivity".equals(intent.getComponent().getClassName())){
+ SafeActivityOptions.abort(options);
+ return ActivityManager.START_SWITCHES_CANCELED;
+ }
+synchronized (mService) {final ActivityStack stack = mSupervisor.mFocusedStack;stack.mConfigWillChange = globalConfig != null
这篇关于[SDM450][Android9.0] 禁止第一次使用谷歌拼音输入法弹出申请使用联系人弹框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!