Vì vậy, tôi đang cố gắng lấy URL được gọi vào ứng dụng của mình, nhưng sau khi nó mở ra, nó luôn luôn có vẻ là null
không quan trọng tôi là gì làm.Lược đồ URL Android: intent.getData() == null (PhoneGap)
Dưới đây là phần có liên quan của manifest của tôi:
<activity android:name="myapp" android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="myapp" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
Và đây là java của tôi:
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
Uri url = intent.getData();
Log.e("myLog", "Url = " + url);
}
Nhật ký được xuất ra "Ý định = null", và tôi không có lỗi.
Tôi không phải là nhà phát triển java nên tôi có thể có một vấn đề đơn giản mà tôi không nhận ra. Tôi sẽ chuyển nó vào ứng dụng PhoneGap của tôi với sendJavascript
nhưng là một ứng dụng PhoneGap dường như không liên quan đến vấn đề này.
EDIT:
tôi dường như chỉ được nhận được <intent-filter>
đầu tiên khi tôi đăng nhập intent
. Dưới đây là các bản ghi:
03-13 12:36:18.593: E/MyAppLog(13793): Intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.wd.myapp/.myapp (has extras) }
SOLUTION:
Sau khi rót qua hàng chục bài viết về cách thực hiện các chương trình URL để mở ứng dụng PhoneGap của bạn, và không ai trong số họ là rất mạnh mẽ hoặc làm việc ở tất cả, Tôi sẽ đăng giải pháp đầy đủ của tôi và hy vọng ai đó thấy nó hữu ích.
Bước một: AndroidManifest.xml - Thêm <intent-filter>
này vào số <activity>
, thay đổi 'urlScheme' thành bất kỳ thứ gì bạn thích. Trong trường hợp này, bạn có thể nhấp vào một liên kết đến urlScheme: ///? Key = val và nó sẽ mở ứng dụng.
<intent-filter>
<data android:scheme="urlScheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
Bước hai: myApp.java - Thêm phần sau bên dưới onCreate
. Nếu bạn đang sử dụng singleTask
, hãy chắc chắn đặt logic intent
của bạn trong chức năng onStart
(thay vì trong onCreate
, vì những người khác đã vượt trội), vì điều đó sẽ cho phép bạn liên kết với ứng dụng của bạn cho dù ứng dụng đó có đang chạy hay không.
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
String url = intent.getDataString();
if(url != "" && url != null) {
super.sendJavascript("setTimeout(function() { handleOpenURL('" + url + "'); },1);");
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); setIntent(intent);
}
Xem câu trả lời được chấp nhận để giải thích về ghi đè onNewIntent
.
Tôi nghĩ ý định Intent cuối cùng = getIntent(); nên là Intent intent = intent.getIntent(); –
Làm thế nào? 'intent' chưa tồn tại. Tôi sẽ thử nó mặc dù. – bearfriend
Vâng, nó không phải là một phương pháp. Tôi tin rằng tôi đã đăng nhập 'intent' như là và có một cái gì đó từ nó. Nó chỉ là phương pháp gọi điện thoại trên nó để có được dữ liệu ra khỏi nó luôn luôn là null. – bearfriend