gpt4 book ai didi

Android创建小部件以启动其他应用程序但在后台

转载 作者:行者123 更新时间:2023-11-29 02:36:33 25 4
gpt4 key购买 nike

我的 Android radio 不能自动启动应用程序,但它可以从小部件启动应用程序。我想制作一个小部件来启动我选择的各种应用程序,但我希望它们只打开其他应用程序然后关闭它们或在后台打开,所以一旦所有应用程序启动,主屏幕仍然显示。我已经有一个简单的 AppWidgetProvider,我正在使用另一个项目:

public class AppStarterWidget  extends AppWidgetProvider {

@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}

@Override
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager,
final int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);

final Handler handler = new Handler();

Runnable runnable = new Runnable() {
@Override
public void run() {

for (int widgetId : appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);

remoteViews.setInt(R.id.btnStartActivity, "setBackgroundResource",
R.drawable.circle_off);

try {
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setComponent(new ComponentName("com.my.app", "Qualified name"));
PendingIntent pendingIntent = PendingIntent.getActivity(
context, 0, intent, 0);
remoteViews.setOnClickPendingIntent(R.id.btnStartActivity, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
//handler.postDelayed(this, 10000);
} catch (ActivityNotFoundException e) {
Toast.makeText(context.getApplicationContext(),
"There was a problem loading the application: ",
Toast.LENGTH_SHORT).show();
}
}

最佳答案

好的。以为我会为可能想要在“后台”启动应用程序的其他人提供一些解决方法。我使用引号是因为它实际上不在背景中,但看起来像在背景中。

免责声明:我创建了一个例程来启动程序,然后我立即重新启动主屏幕。由于我的意思是要有一个小部件来运行通常会获得启动完成广播的应用程序,因此如果启动器 Activity 未调用相同的代码,这可能无法正常工作。

您还需要处理关于如何以及何时调用它的逻辑,因为它会转到主屏幕。因此,如果调用它的任何东西在前台有一个 Activity ,它将被移到后台。

此外,这不是完整的代码,但应该足以让您了解思路。需要将 packagename 的 SharedPreference 设置为 true 才能启动应用程序。否则它只是遍历并完成。如果您想放入计时器循环,我还包含了一些代码来处理调用而无需一遍又一遍地重新启动应用程序。

public class LaunchAppInBackground extends AppCompatActivity {

static SharedPreferences sPrefs;
static boolean bUpdatingAppSelection;
private static ArrayList<String> alStartedApps = new ArrayList<>();

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

sPrefs = PreferenceManager.getDefaultSharedPreferences(this);
startAllApps(this);
}

static void startAllApps(Context context) {

if(bUpdatingAppSelection) {
return;
}

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List<ResolveInfo> launchables = context.getPackageManager()
.queryIntentActivities(mainIntent, 0);

// Loop through all apps
for (ResolveInfo launchable : launchables) {

// If app is in Preferences
if (sPrefs.getBoolean(launchable.activityInfo.packageName, false)) {

// Check if already launched
Log.i("AI", "Checking " + launchable.activityInfo.applicationInfo.packageName);
boolean bAlreadyLaunched = false;
for (String s : alStartedApps) {
if (s.equals(launchable.activityInfo.applicationInfo.packageName)) {
bAlreadyLaunched = true;
}
}

// Start if not already launched
if (!bAlreadyLaunched) {
alStartedApps.add(launchable.activityInfo.applicationInfo.packageName);
startApp(launchable, context);
} else {
Log.i("AI", launchable.activityInfo.applicationInfo.packageName
+ " already running");
}
}
}
}

static void startApp(ResolveInfo launchable, Context context) {
if(launchable != null) {
ActivityInfo activity = launchable.activityInfo;
ComponentName name = new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
i.setComponent(name);
context.startActivity(i);
loadHomeScreen(context);
Log.i("AI", "Launched " + activity.applicationInfo.packageName);
}
}

static void loadHomeScreen(Context context) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
context.startActivity(intent);
}
}

关于Android创建小部件以启动其他应用程序但在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46658565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com