java String packageName = intent.getDataString(); 怎么只取包名
时间: 2024-02-17 07:04:47 浏览: 25
您可以使用Java中的URI类和PackageManager类来获取包名。
您可以尝试以下代码:
```
Uri uri = Uri.parse(packageName);
String packageNameOnly = uri.getSchemeSpecificPart();
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(packageNameOnly, 0);
String packageName = packageInfo.packageName;
```
这里,我们首先将intent.getDataString()返回的字符串转换为Uri对象,然后使用getSchemeSpecificPart()方法从Uri对象中提取包名。接着,我们使用PackageManager类通过包名获取PackageInfo对象,最后从PackageInfo对象中获取包名。
请注意,这段代码需要在try-catch块中执行,以处理可能的异常。
相关问题
java String packageName = intent.getDataString(); if (packageName != null) { // 目标应用被关闭了,执行自己的逻辑 // ... for (int i=0;i<handlerManager.get_BrowsableApkInfo().getJSONArray("content_list").size();i++){ } }补全是否packageName是否在json中
以下是补全后的代码,判断 `packageName` 是否在 JSON 中:
```
java
String packageName = intent.getDataString();
if (packageName != null) {
// 目标应用被关闭了,执行自己的逻辑
// ...
JSONArray contentList = handlerManager.get_BrowsableApkInfo().getJSONArray("content_list");
boolean isPackageExist = false;
for (int i = 0; i < contentList.size(); i++) {
JSONObject content = contentList.getJSONObject(i);
String packageNameInJson = content.getString("package_name");
if (packageName.equals(packageNameInJson)) {
isPackageExist = true;
break;
}
}
if (isPackageExist) {
// packageName 存在于 JSON 中
// ...
} else {
// packageName 不存在于 JSON 中
// ...
}
}
```
优化代码public class SecondActivity extends AppCompatActivity { private TextView textView9, textView11, textView13, textView15, textView17, textView19; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Intent intent = getIntent(); String num = intent.getStringExtra("num"); String name = intent.getStringExtra("name"); String score1 = intent.getStringExtra("score1"); String score2 = intent.getStringExtra("score2"); String score3 = intent.getStringExtra("score3"); double average = intent.getDoubleExtra("average", 0); textView9 = findViewById(R.id.textView9); textView11 = findViewById(R.id.textView11); textView13 = findViewById(R.id.textView13); textView15 = findViewById(R.id.textView15); textView17 = findViewById(R.id.textView17); textView19 = findViewById(R.id.textView19); textView9.setText(num); textView11.setText(name); textView13.setText(score1); textView15.setText(score2); textView17.setText(score3); textView19.setText(String.format("%.2f", average)); } }
这段代码已经非常简洁,不过还可以进一步优化:
1. 将 findViewById() 方法的调用放在 onStart() 方法中,避免在 onCreate() 方法中执行过多的操作;
2. 使用 ButterKnife 或者 ViewBinding 来代替 findViewById() 方法,可以进一步简化代码。
下面是使用 ButterKnife 优化后的代码:
```
public class SecondActivity extends AppCompatActivity {
@BindView(R.id.textView9)
TextView textView9;
@BindView(R.id.textView11)
TextView textView11;
@BindView(R.id.textView13)
TextView textView13;
@BindView(R.id.textView15)
TextView textView15;
@BindView(R.id.textView17)
TextView textView17;
@BindView(R.id.textView19)
TextView textView19;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
ButterKnife.bind(this);
Intent intent = getIntent();
String num = intent.getStringExtra("num");
String name = intent.getStringExtra("name");
String score1 = intent.getStringExtra("score1");
String score2 = intent.getStringExtra("score2");
String score3 = intent.getStringExtra("score3");
double average = intent.getDoubleExtra("average", 0);
textView9.setText(num);
textView11.setText(name);
textView13.setText(score1);
textView15.setText(score2);
textView17.setText(score3);
textView19.setText(String.format("%.2f", average));
}
}
```
使用 ViewBinding 优化后的代码:
```
public class SecondActivity extends AppCompatActivity {
private ActivitySecondBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivitySecondBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Intent intent = getIntent();
String num = intent.getStringExtra("num");
String name = intent.getStringExtra("name");
String score1 = intent.getStringExtra("score1");
String score2 = intent.getStringExtra("score2");
String score3 = intent.getStringExtra("score3");
double average = intent.getDoubleExtra("average", 0);
binding.textView9.setText(num);
binding.textView11.setText(name);
binding.textView13.setText(score1);
binding.textView15.setText(score2);
binding.textView17.setText(score3);
binding.textView19.setText(String.format("%.2f", average));
}
}
```
使用 ButterKnife 或者 ViewBinding 可以使代码更加简洁易读。