2013-04-10 12 views
8

私が取り組んでいるアプリは、選択したカレンダーでイベントを作成する必要があり、カレンダー表示アプリでこれらのイベントを表示すると、自分のアプリに戻るオプションを提供します詳細な情報とそれに関連するデータを表示します。カレンダーからアンドロイドアプリを開く

Calendar Provider私はイベントを作成することができ、後で使用/削除するためにイベントにUriを格納しますが、カレンダー表示アプリケーションでこれらのイベントからアプリケーションを開くための良い方法が見つかりませんでした。

私が考えている2つのオプションは、クリックしたときにアプリケーション(例:myapp:// event/1000)のインテントフィルターでキャッチされるイベントの説明にカスタムURLを含めるか、CUSTOM_APP_PACKAGE and CUSTOM_APP_URIイベントの作成時にCalendarContractの値を返します。

最初のオプションを使用して私の問題は、私は私がアプリを見カレンダーが正しくリンクとしての私のカスタムURLを治療し、その上にユーザーがクリックは(上のGoogleカレンダーに動作しなかったようになることを保証することができるとは思わないということです私の錠剤)。 2番目のオプションはより有望に見えますが、私はそれを使用する方法を説明する多くの文書を見つけることができませんでした。

これを正しく行う方法を知っている人はいますか?どんな助けもありがとう!

+0

あなたは情報を提供してもらえます。カレンダーからアプリに戻るためのオプションを提供した方法の実装について –

+0

こんにちはWoestman!詳細な情報を表示するには、カレンダーからアプリに戻るための実装メカニズムについての情報をお知らせください。 –

答えて

4

最初のオプションは、私はちょうどそれがデフォルトのGoogleカレンダーアプリから来て働いていたことを確認するために、今それを試してみました私のネクサスSに細かい作業を記載されています。

私の場合、私はmyapp://event/1000を傍受していません、私はhttps://myspecialdomain.com/blahblahのように実際のURLを傍受しています。ブラウザはロードを開始しますが、ロードする時間が来る前に、アプリケーションによってスワップアウトされます。

私は明日あなたのコードを見せてくれます。

+1

速い応答に感謝します(私は応答するのに時間がかかります)。 APIレベルが16未満の場合は、APIレベル16以上でCUSTOM_APP_PACKAGEとCUSTOM_APP_URIを使用しました。より低いAPIレベルで動作するCUSTOM_APP_PACKAGEのようなものがあることを期待していましたが、実装する前にあなたの提案がうまくいくのを聞いてうれしかったです。 ありがとう! – woestman

+0

@Stephan Imはあなたの提案とまったく同じことをしており、何らかの理由でブラウザが開かれているだけです。電子メール、つぶやき、whatsappメッセージから同じリンクをクリックすると、同じインテントフィルタが完全に機能しています。 – AsafK

+0

これは私の意図フィルタです。どのようなアイデアがここに間違っている。 <データ アンドロイド:ホスト= "www.my.com" android:pathPrefix = "/ product /" android:scheme = "https" /> AsafK

11

ゼリービーン(API 16+)をターゲティングする場合は、CUSTOM_APP_PACKAGEを使用するのが最適です。新しいカレンダーイベントを追加して、あなただけ(あなたのパッケージ名とそれぞれイベントを特定するURIを持つ)CUSTOM_APP_PACKAGECUSTOM_APP_URIフィールドを埋めるために必要がある場合:

ContentValues values = new ContentValues(); 
values.put(CalendarContract.Events.CALENDAR_ID, 1); 
values.put(CalendarContract.Events.TITLE, "Check stackoverflow.com"); 
values.put(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis()); 
values.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis()); 
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); 

values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, getPackageName()); 
values.put(CalendarContract.Events.CUSTOM_APP_URI, "myAppointment://1"); 

getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);  

次に、あなた(のAndroidManifest.xmlの一部として指定する必要があります「the documentationが説明しているように)詳細ビューを表示するためにカレンダーアプリから呼び出されるアクティビティ

<activity android:name=".ShowCalendarDetailActivity"> 
     <intent-filter> 
      <action android:name="android.provider.calendar.action.HANDLE_CUSTOM_EVENT" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="vnd.android.cursor.item/event" /> 
     </intent-filter>    
    </activity> 

ShowCalendarDetailActivityが表示され、ボタンをタップしたときに開始され、そしてアクション"android.provider.calendar.action.HANDLE_CUSTOM_EVENT"との意向を渡され、そのURIは、予定表アイテムURIになります。

あなたが指定したカスタムURIは、CalendarContract.EXTRA_CUSTOM_APP_URIのキーで追加されています。

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    String myCustomUri = getIntent().getStringExtra(CalendarContract.EXTRA_CUSTOM_APP_URI); 

    ... 
} 

あなたはカレンダーアプリは、この意図を構築するコードを見てみたい場合は、EventInfoFragment.javaEventInfoFragment.updateCustomAppButton()を参照してください。

+0

私はそれを開くボタンがないので、アプリがカレンダーに表示されます。私はインテント(エクストラのCUSTOM_APP_PACKAGEとCUSTOM_APP_URI)を使用するだけで、カレンダープロバイダーは使用できません。これも可能であるか、カレンダープロバイダに切り替える必要がありますか? – friday

+0

こんにちは@friday私は実際にそれをテストしていないが、私はコンテンツプロバイダの代わりにインテントを使用して(例えば、連絡先を追加するとき)他の問題があった。だから私はそれがうまくいかなかったら驚かないだろう...:/ – matiash

0

@matiash GoogleカレンダーAPIでこれを行う方法。

values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, getPackageName()); 
values.put(CalendarContract.Events.CUSTOM_APP_URI, "myAppointment://1"); 
関連する問題