私がやりたいことは:
1)アクティビティ内にいます。2つのボタンがあります。最初のボタンをクリックすると、ホーム画面にショートカットが作成されます。ショートカットは、以前にダウンロードされたhtml
ページを開くので、デフォルトのブラウザを使用したいのですが、すでにページを持っているのでインターネットを使用したくありません。
2)2番目のボタンは、アクティビティを開始する別のショートカットを作成します。そして、私はアクティビティにいくつかの追加の引数を渡したいです(例えば文字列として)...........
それらは可能ですか? Android:ホーム画面にWebショートカットを作成するプログラミング方法はありますか のようなリンクと同様の質問をいくつか見つけました。
彼らは私の質問への答えのようですが、誰かがこのコードはすべてのデバイスで動作するわけではなく、それは非推奨であり、私がやりたいことは不可能だと教えてくれました...
この手法は推奨されません。これは内部実装であり、Android SDKの一部ではありません。すべてのホーム画面の実装では動作しません。Androidのすべての過去のバージョンで動作しない可能性があります。将来のバージョンでは動作しない可能性がありますGoogleは内部のドキュメント化されていないインターフェースを維持する義務を負わないため、Androidを使用します。これは使用しないでください。
内部実装とはどういう意味ですか?そのコードは信頼できるかどうか..... help me pls .....
サンプルコードでは、ドキュメント化されていないインターフェイス(許可と意図)を使用してショートカットをインストールします。 「誰か」が言ったように、これはすべての電話で動作しない可能性があり、将来的に壊れる可能性がありますAndroidリリース。それをしないでください。
正しい方法は、ホーム画面からのショートカットリクエストをリッスンすることです。マニフェストでそのようなインテントフィルターを使用します。
<activity Android:name=".ShortCutActivity" Android:label="@string/shortcut_label">
<intent-filter>
<action Android:name="Android.intent.action.CREATE_SHORTCUT" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
</activity>
次に、インテントを受け取るアクティビティで、ショートカットのインテントを作成し、アクティビティ結果として返します。
// create shortcut if requested
ShortcutIconResource icon =
Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);
Intent intent = new Intent();
Intent launchIntent = new Intent(this,ActivityToLaunch.class);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, someNickname());
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
setResult(RESULT_OK, intent);
Android Homescreen [自分のアプリでテスト済み]にショートカットアイコンを作成する方法を1つ開発しました。それを呼び出してください。
private void ShortcutIcon(){
Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Test");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
addIntent.setAction("com.Android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
}
アクティビティ名、アイコンリソース、許可を変更することを忘れないでください。
<uses-permission Android:name="com.Android.launcher.permission.INSTALL_SHORTCUT" />
ハッピーコーディング!!!
編集:
重複する問題の場合、最初のオプションはコードの次の行を追加することです。それ以外の場合は、毎回新しい行が作成されます。
addIntent.putExtra("duplicate", false);
2番目のオプションは、最初にアプリのショートカットアイコンをアンインストールし、最初のオプションが機能しなかった場合に再度インストールすることです。
Android oreo。 [〜#〜] link [〜#〜] 以来、com.Android.launcher.action.INSTALL_SHORTCUTブロードキャストは効果がなくなりました。
すべてのAndroidバージョン、特にAndroid 8.0またはoreo以降をサポートする場合は、以下のコードを使用して作成しますショートカット:
public static void addShortcutToHomeScreen(Context context)
{
if (ShortcutManagerCompat.isRequestPinShortcutSupported(context))
{
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
.setIntent(new Intent(context, YourActivity.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
.setShortLabel("Test")
.setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher))
.build();
ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
}
else
{
// Shortcut is not supported by your launcher
}
}
マニフェストファイルに権限を追加します。
<uses-permission Android:name="com.Android.launcher.permission.INSTALL_SHORTCUT"/>
上記のソリューションを少し改善しました。現在は、ショートカットが既に追加されているかどうかを設定に保存し、ユーザーが削除した場合、アプリの新しい起動時に追加しません。これにより、既存のショートカットを追加するコードが実行されなくなるため、少し時間が節約されます。
final static public String PREFS_NAME = "PREFS_NAME";
final static private String PREF_KEY_SHORTCUT_ADDED = "PREF_KEY_SHORTCUT_ADDED";
// Creates shortcut on Android widget screen
private void createShortcutIcon(){
// Checking if ShortCut was already added
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
boolean shortCutWasAlreadyAdded = sharedPreferences.getBoolean(PREF_KEY_SHORTCUT_ADDED, false);
if (shortCutWasAlreadyAdded) return;
Intent shortcutIntent = new Intent(getApplicationContext(), IntroActivity.class);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "YourAppName");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
addIntent.setAction("com.Android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
// Remembering that ShortCut was already added
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(PREF_KEY_SHORTCUT_ADDED, true);
editor.commit();
}
Android Oから始まり、これはショートカットを作成する方法です。
if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
final ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(context, shortcutId)
.setIcon(Icon.createWithResource(context, R.mipmap.ic_launcher))
.setShortLabel(label)
.setIntent(new Intent(context, MainActivity.class).setAction(Intent.ACTION_MAIN))
.build();
shortcutManager.requestPinShortcut(pinShortcutInfo, null);
}
残念ながら、多くの制限があります。
Android O以前の場合、ShortcutManagerCompatを使用して、これらの制限なしで新しいショートカットを作成することもできます。
API level 26
なので、com.Android.launcher.action.INSTALL_SHORTCUT
の使用は非推奨です。ショートカットを作成する新しい方法は、 ShortcutManager
を使用することです。
静的、動的、および固定の3種類のショートカットがあることに言及しています。要件に基づいて、作成することを選択できます。
@Siddiq Abu Bakkar Answerが動作します。ただし、アプリを起動するたびにショートカットが作成されるのを防ぐため、共有設定を使用します。
final String PREF_FIRST_START = "AppFirstLaunch";
SharedPreferences settings = getSharedPreferences(PREF_FIRST_START, 0);
if(settings.getBoolean("AppFirstLaunch", true)){
// record the fact that the app has been started at least once
settings.edit().putBoolean("AppFirstLaunch", false).commit();
ShortcutIcon();
}
final Intent shortcutIntent = new Intent(this, SomeActivity.class);
final Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
// Sets the custom shortcut's title
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
// Set the custom shortcut icon
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon));
// add the shortcut
intent.setAction("com.Android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);
public static void addShortcutToHomeScreen(Context context)
{
if (ShortcutManagerCompat.isRequestPinShortcutSupported(context))
{
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
.setIntent(new Intent(context, YourActivity.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
.setShortLabel("Test")
.setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher))
.build();
ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
}
else
{
// Shortcut is not supported by your launcher
}
}
私はそれを使用しましたが、ホーム画面上のいくつかのデバイスは2つのアイコンを追加します。理解できませんでした??