2016-07-26 9 views
1

私のアプリの内部アクティビティのホームスクリーンショートカットを作成したいと思います。 This私の手助けをしてくれました。Android:Homescreenショートカット(シリアライズ可能なエクストラ)

は、ここで基本的なコードです:残念ながら

Intent shortcutIntent = new Intent(context.getApplicationContext(), 
     StationMainActivity.class); 
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 

Intent addIntent = new Intent(); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, stationData.getName()); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
     Intent.ShortcutIconResource.fromContext(context.getApplicationContext(), 
       R.drawable.ic_launcher)); 

addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 
context.getApplicationContext().sendBroadcast(addIntent); 

、それはコードが、私はshortcutIntentにシリアライズ可能な余分を提供しようとすると失敗するように見えるString型の余分を提供するために、作業を行いながら。

shortcutIntent.putExtra("StationId", (String) stationData.getId()); 

が機能します。ただし、

ここで、stationDataはシリアル化可能なオブジェクトではありません。今は、オブジェクトのすべてのフィールドを文字列として提供し、アクティビティが呼び出されたときにオブジェクトを再作成します。これは機能しますが、面倒で汚れたコードです。

この場合、シリアル化可能オブジェクトを提供することができないのではないでしょうか?ありがとう。

アップデート:ここで私はシリアライズを取得しようとする方法は次のとおりです。

stationData = (StationData) intent.getSerializableExtra("StationData"); 

StationDataは次のようになります。あなたがデータを使用しようとする取得しようとすると、

public class StationData implements Serializable { 
    private String id; 
    private String name; 
    ... 

    public StationData(String id, String name, ....) { 
     this.id = id; 
     this.name = name; 
     ... 
    } 
} 
+0

あなたのstationDataはシリアライザから拡張していますか?また、エクストラをどのように入手しているのかに関するコードを提供できますか? – PedroAGSantos

+0

はい、そうです。シリアライズは、ショートカットインテントに使用されていない場合はうまく機能します。 – Androidicus

+0

シリアライザを取得するときにコードを提供できますか? – PedroAGSantos

答えて

0

Bundle extras = getIntent().getExtras(); 
extras.getSerializable("StationData"); 
関連する問題