[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值