[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

你可能感兴趣的:(Android9.0,SDM450,Android9.0,谷歌拼音,联系人弹框)