android 10.0 设置默认launcher resolverActivity

本文档详细介绍了如何在Android 10.0系统中修改ResolverActivity,用于处理Intent选择多匹配项的情况。源代码变更展示了如何设置默认启动器,并特别关注了`setupDefaultLauncher()`方法,该方法根据给定包名查找默认启动位置并执行相应操作。

diff --git a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
index 996158755c…56c6005361 100644
— a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
+++ b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
@@ -93,6 +93,8 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;

+import android.os.SystemProperties;
+
/**

  • This activity is displayed when the system attempts to start an Intent for
  • which there is more than one matching activity, allowing the user to decide
    @@ -256,6 +258,21 @@ public class ResolverActivity extends Activity {
    intent.setFlags(intent.getFlags()&~Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    return intent;
    }
  • private void setupDefaultLauncher() {
  • int position = mAdapter.getDefaultHomePosition(“net.spidercontrol.automb”);
  • //如果不存在则return
  • if (position == -1) {
  • Log.e(TAG, “position:”+position);
  • return;
  • }
  • Log.e(TAG, “position:::”+position);
  • startSelected(position, true, false);
  • finish();
  • }
 @Override
 protected void onCreate(Bundle savedInstanceState) {
@@ -367,6 +384,20 @@ public class ResolverActivity extends Activity {
MetricsProto.MetricsEvent.ACTION_SHOW_APP_DISAMBIG_NONE_FEATURED,
intent.getAction() + “:” + intent.getType() + “:”
+ (categories != null ? Arrays.toString(categories.toArray()) : “”));
  •   		Log.e(TAG, "postDelayed:");	
    
  •   		        boolean aBoolean = SystemProperties.getBoolean("persist.sys.first", true);
    
  •   				if(aBoolean){
    
  •   							getMainThreadHandler().postDelayed(new Runnable() {
    
  •   							@Override
    
  •   							public void run() {
    
  •   						setupDefaultLauncher();
    
  •   							}
    
  •   						},600);
    
  •   				}else{
    
  •   						setupDefaultLauncher();
    
  •   				}
    
  • }

    protected void onProfileClick(View v) {
    @@ -904,6 +935,7 @@ public class ResolverActivity extends Activity {
    && !ri.handleAllWebDataURI && id == R.id.button_always) {
    showSettingsForSelected(ri);
    } else {

  •   	Log.v(TAG,"111111111"+hasIndexBeenFiltered);
           startSelected(which, id == R.id.button_always, hasIndexBeenFiltered);
       }
    

    }
    @@ -927,6 +959,8 @@ public class ResolverActivity extends Activity {
    }

    public void startSelected(int which, boolean always, boolean hasIndexBeenFiltered) {

  •   	Log.e(TAG, "startSelected:");
    
  •   		Log.e(TAG, "isFinishing:"+isFinishing());
       if (isFinishing()) {
           return;
       }
    

@@ -936,13 +970,19 @@ public class ResolverActivity extends Activity {
com.android.internal.R.string.activity_resolver_work_profiles_support),
ri.activityInfo.loadLabel(getPackageManager()).toString()),
Toast.LENGTH_LONG).show();

  •   				Log.e(TAG, "mResolvingHome:"+mResolvingHome);
           return;
       }
    
  •   Log.e(TAG, "which:"+which+" hasIndexBeenFiltered:"+hasIndexBeenFiltered);
       TargetInfo target = mAdapter.targetInfoForPosition(which, hasIndexBeenFiltered);
    
  •   if(target !=null){
    
  •   		Log.e(TAG, "target:"+target.getResolveInfo());
    
  •   }
    
  •    if (target == null) {
           return;
       }
    
  •   Log.e(TAG, "onTargetSelected:");
       if (onTargetSelected(target, always)) {
           if (always && mSupportsAlwaysUseOption) {
               MetricsLogger.action(
    

@@ -971,7 +1011,7 @@ public class ResolverActivity extends Activity {
protected boolean onTargetSelected(TargetInfo target, boolean alwaysCheck) {
final ResolveInfo ri = target.getResolveInfo();
final Intent intent = target != null ? target.getResolvedIntent() : null;

  •   Log.e(TAG, "intent:"+intent);
       if (intent != null && (mSupportsAlwaysUseOption || mAdapter.hasFilteredItem())
               && mAdapter.mUnfilteredResolveList != null) {
           // Build a reasonable intent filter, based on what matched.
    

@@ -1282,6 +1322,8 @@ public class ResolverActivity extends Activity {
mAdapterView.setVisibility(View.VISIBLE);
onPrepareAdapterView(mAdapterView, mAdapter);
}
+
+
return false;
}

@@ -1668,6 +1710,19 @@ public class ResolverActivity extends Activity {
finish();
}
}
+

  •   public int getDefaultHomePosition(String packageName){
    
  •   		Log.e(TAG, "mDisplayList:"+mDisplayList.size());
    
  •   	for (int i = 0; i < mDisplayList.size(); i++) {
    
  •   	ResolveInfo info = mDisplayList.get(i).getResolveInfo();
    
  •   		Log.e(TAG, "info:"+info);
    
  •   		if (info.activityInfo.packageName.equals(packageName)) {
    
  •   		return i;
    
  •   		}
    
  •   	}
    
  •   	return -1;
    
  •   }
    
       public void setPlaceholderCount(int count) {
           mPlaceholderCount = count;
    

@@ -1972,6 +2027,8 @@ public class ResolverActivity extends Activity {
return;
}
}

  •   		Log.e(TAG, "addResolveInfo getResolveInfo:"+dri.getResolveInfo());
    
  •   		//	Log.e(TAG, "addResolveInfo getResolvedIntent:"+dri.getResolvedIntent());
               mDisplayList.add(dri);
           }
       }
    

@@ -2011,14 +2068,16 @@ public class ResolverActivity extends Activity {

     @Nullable
     public TargetInfo getItem(int position) {
  •   	Log.v(TAG,"mFilterLastUsed:"+mFilterLastUsed +" mLastChosenPosition:"+mLastChosenPosition );
           if (mFilterLastUsed && mLastChosenPosition >= 0 && position >= mLastChosenPosition) {
               position++;
           }
    
  •        if (mDisplayList.size() > position) {
    
  •   			Log.v(TAG,"position:"+position +" mDisplayList.size():"+mDisplayList.size() );
    
  •      if (mDisplayList.size() > position) {
               return mDisplayList.get(position);
    
  •        } else {
    
  •            return null;
    
  •        }
    
  •       } else {
    
  •          return null;
    
  •      }
       }
    
       public long getItemId(int position) {
    

@@ -2202,6 +2261,7 @@ public class ResolverActivity extends Activity {
}
mLastSelected = checkedPos;
} else {

  •   		Log.v(TAG,"22222222");
               startSelected(position, false, true);
           }
       }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android framework

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值